Android:更新数据
我的代码在更新数据时有问题。在更新类中,id是错误的,我已经在DatabaseHelper类中声明了它,但它仍然是错误的。请检查我的密码Android:更新数据,android,sqlite,Android,Sqlite,我的代码在更新数据时有问题。在更新类中,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 sqLiteDataba
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();
}
}
您可以使用查询语言在数据库上运行简单查询。这里有一个例子
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)");
是的,还有很多其他方法可以进行数据库操作。但对于初学者,我认为这种方法更简单。在代码的下一行用列名替换表名
String selection = AdminContact.Question.TABLE_QUIZ + " LIKE ?";
取代
String selection = AdminContact.Question.COLUMN_QUESTION + " LIKE ?";
看看你的代码,你正在做一个单一的更新,然后不要想
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。您也可以通过函数将其传递给更新数据时出现的错误。.当我单击“更新”按钮时,它只会返回到上一页,并且数据不会发生任何更改。在您的选择字符串中,我认为一定有一些列名称。.而不是表名称。.您能举个例子吗?先生???请检查我的答案。.先生Reaz mproject可以添加、查看、删除和搜索。唯一的问题是更新方法。请尝试使用类似的方法<代码>db.rawQuery(“更新”+表格单词+“设置”+关键字单词+“=””+单词.getWord()+“,”+关键字单词定义+“=”+单词.getDefinition()+”,其中“+关键字单词ID+”=”+单词.getID(),null)代码>我应该把这些Sir??sqLiteDatabase.rawQuery(“更新问题\u表集ques='新问题',ans1='答案1',ans2='答案2',ans3='答案3',ans4='答案4'其中id=yourid',null)Sir Ibukin KEY\u ROWID+“=”+ROWID,这些是id列的名称吗?这是我的表Sir私有静态最终字符串CREATE\u QUERY=“创建表格”+AdminContact.Question.TABLE_Quike+”(“+AdminContact.Question.ID+”整型主键不为空“+AdminContact.Question.COLUMN_Question+”文本不为空“+AdminContact.Question.COLUMN_ANSWER1+”文本不为空“+AdminContact.Question.COLUMN_ANSWER3+”文本不为空,“+AdminContact.Question.COLUMN_ANSWER4+”文本不为空);”;是,它是行ID,与AdminContact.Question.ID相同。在表中创建行时,它返回一个ID(lond类型)。你需要传入它来替换我指定的rowID变量,除非你没有传入正确的ID。它应该可以工作,因为这是我在大多数需要数据库更新的应用程序中使用的。那么,你如何查询数据库中唯一的行?这和你用的身份证是一样的