2016-01-06 65 views
1

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

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(); 

     } 

    } 
+0

更新数据时你会得到什么错误.. – Meenal

+0

当我点击按钮更新时,它只会回到上一页,并且没有任何数据变化。 –

+0

在你的选择字符串,我认为必须有一些列名..不是一个表名.. – Meenal

回答

0

看着你的代码,你正在做一个更新,然后不认为

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。你也可以通过函数传递它

+0

SIr Ibukin KEY_ROWID +“=”+ rowId,是这些ID的列的名称? –

+0

This 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 +“TEXT NOT NULL”;“ ; –

+0

是的,它的行ID与AdminContact.Question.ID相同。当您在表中创建一行时,它会返回一个ID(类型为lond)。你需要通过它来替换我指定的rowID变量 –

0

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

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)"); 

是的,还有很多其他的数据库操作方式。但对于初学者,我认为这种方法更容易。

+0

Sir Reaz m项目可以添加,查看,删除和搜索唯一的问题是更新方法。 –

+0

请尝试使用这样的事情。 db.rawQuery(“UPDATE”+ TABLE_WORDS +“SET”+ KEY_WORD +“='”+ word.getWord()+“',”+ KEY_DEFINITION +“='”+ word.getDefinition()+“'WHERE”+ KEY_ID +“=”+ word.getID(),null);' –

+0

我应该在哪里放这些Sir? –

1

与列名在下面一行在你的代码替换表名

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

更换

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

先生,非常感谢你的工作 –