【问题标题】:Android: Update DataAndroid:更新数据
【发布时间】:2016-04-10 13:58:31
【问题描述】:

我的代码在更新数据时遇到问题。在更新类中,id 是错误的,我已经在 DatabaseHelper 类中声明了它,但它仍然是错误的。请检查我的代码。

My DatabaseHelper class:


   public boolean updateData(long id, String new_question, String new_ans1, String new_ans2, String new_ans3, String new_ans4, SQLiteDatabase sqLiteDatabase )
        {
        ContentValues contentValues = new ContentValues();

            contentValues.put(AdminContact.Question.COLUMN_QUESTION, new_question);
            contentValues.put(AdminContact.Question.COLUMN_ANSWER1, new_ans1);
            contentValues.put(AdminContact.Question.COLUMN_ANSWER2, new_ans2);
            contentValues.put(AdminContact.Question.COLUMN_ANSWER3, new_ans3);
            contentValues.put(AdminContact.Question.COLUMN_ANSWER4, new_ans4);

           // String selection = AdminContact.Question.TABLE_QUIZ + " LIKE ?";
            //String[] selection_arg = {new_question};
           int i = sqLiteDatabase.update(AdminContact.Question.TABLE_QUIZ, contentValues, AdminContact.Question.ID + "=" + id, null);
            return i > 0;

        }



    upgrade class:

     public void updateData(View view)
        {
        helper = new DatabaseHelper(this);
            sqLiteDatabase = helper.getWritableDatabase();

            String question, ans1, ans2, ans3, ans4;

            question = New_Question.getText().toString();
            ans1 = New_Ans1.getText().toString();
            ans2 = New_Ans2.getText().toString();
            ans3 = New_Ans3.getText().toString();
            ans4 = New_Ans4.getText().toString();
            helper.updateData(id,question,ans1,ans2,ans3,ans4,sqLiteDatabase);
            Toast.makeText(getApplicationContext()," Successfully Updated", Toast.LENGTH_LONG).show();
            finish();

        }

    }

【问题讨论】:

  • 更新数据时遇到什么错误..
  • 当我点击更新按钮时,它只会返回上一页,数据没有任何变化。
  • 在您的选择字符串中,我认为必须有一些列名..不是表名..
  • 先生能举个例子吗???
  • 请检查我的答案..

标签: android sqlite


【解决方案1】:

将表名替换为代码下一行中的列名

String selection = AdminContact.Question.TABLE_QUIZ + " LIKE ?";

替换为

String selection = AdminContact.Question.COLUMN_QUESTION + " LIKE ?";

【讨论】:

    【解决方案2】:

    看着你的代码,你正在做一次更新然后别想

    String selection = AdminContact.Question.TABLE_QUIZ + " LIKE ?";`
    

    将是最好的方法,您应该使用 id 代替,我已经修改了代码。你可以检查一下。而且我还注释掉了一部分代码

    public int updateData(String new_question, String new_ans1, String new_ans2, String new_ans3, String new_ans4, SQLiteDatabase sqLiteDatabase ) {
    
    ContentValues contentValues = new ContentValues();
    contentValues.put(AdminContact.Question.COLUMN_QUESTION, new_question);
    contentValues.put(AdminContact.Question.COLUMN_ANSWER1, new_ans1);
    contentValues.put(AdminContact.Question.COLUMN_ANSWER2, new_ans2);
    contentValues.put(AdminContact.Question.COLUMN_ANSWER3, new_ans3);
    contentValues.put(AdminContact.Question.COLUMN_ANSWER4, new_ans4);
    
    //  String selection = AdminContact.Question.TABLE_QUIZ + " LIKE ?";
    //  String[] selection_arg = {new_question};
    
    int count = sqLiteDatabase.update(AdminContact.Question.TABLE_QUIZ,   contentValues, KEY_ROWID + "=" + rowId, null);
    
    return count;
    }
    

    我添加了KEY_ROWID + "=" + rowId,其中 rowId 是您要更新的特定内容的 ID。也可以通过函数传入

    【讨论】:

    • SIr Ibukin KEY_ROWID + "=" + rowId,这些是ID的Column的名字吗??
    • This my Table Sir private static final String CREATE_QUERY = "CREATE TABLE "+ AdminContact.Question.TABLE_QUIZ+"("+ AdminContact.Question.ID+" INTEGER PRIMARY KEY NOT NULL,"+ AdminContact.Question. COLUMN_QUESTION+" TEXT NOT NULL,"+ AdminContact.Question.COLUMN_ANSWER1+" TEXT NOT NULL,"+ AdminContact.Question.COLUMN_ANSWER2+" TEXT NOT NULL,"+ AdminContact.Question.COLUMN_ANSWER3+" TEXT NOT NULL,"+ AdminContact.Question.COLUMN_ANSWER4+"文本不为 NULL);";
    • 是的,它的行 ID,与 AdminContact.Question.ID 相同。当您在表中创建一行时,它会返回一个 ID(类型为 lond)。你需要传入它来替换我指定的rowID变量
    • 除非您没有传入正确的 ID。它应该可以工作,因为这是我在大多数需要数据库更新的应用程序中使用的
    • 那么如何查询数据库中的唯一行呢?它与您使用的 id 相同
    【解决方案3】:

    您可以使用查询语言在您的数据库上运行简单查询。这是一个例子。

    SQLiteDatabase db;
    db.execSQL("create table if not exists "
                    + "user"
                    + "(_id integer primary key autoincrement, name text not null,  number text not null, "
                    + "address text not null, status integer not null, date integer not null)");
    

    是的,还有许多其他方法可以进行数据库操作。但对于初学者来说,我认为这种方法更容易。

    【讨论】:

    • Sir Reaz m 项目可以添加、查看、删除和搜索,唯一的问题是更新方法。
    • 请尝试使用类似的东西。 db.rawQuery("UPDATE "+ TABLE_WORDS + " SET "+ KEY_WORD + " = '"+word.getWord()+"' ,"+KEY_DEFINITION+"= '"+word.getDefinition()+ "' WHERE " + KEY_ID + " = "+word.getID(), null);
    • 先生,我应该把这些放在哪里??
    • sqliteDatabase.rawQuery("UPDATE question_table SET ques = '新问题', ans1 = 'answer 1', ans2 = 'answer 2', ans3 = 'answer3', ans4 = 'answer4' WHERE id =你的ID”,空)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    相关资源
    最近更新 更多