在 Android java 中尝试更新 sqlite 数据库中的现有行时出错?
Error when trying to update an existing row in sqlite database in Android java?
我正在尝试使用编辑文本中的值更新数据库。但我在记录器中收到错误消息:“*** Process: com.example.coursework2, PID: 12430
android.database.sqlite.SQLiteException: 没有这样的列: Wordc (code 1 SQLITE_ERROR): , 编译时: UPDATE Phrases_table SET word = Word WHERE word = Wordc
在 android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机方法)
Wordc 是存储在数据库中的单词,"Word" 是我试图更新数据库的值。我是新手,请帮忙。**
// 数据库 class, 我只有 1 列是 COL_2
public void updateName(String newName,String oldName) { // issue is here
SQLiteDatabase db = this.getWritableDatabase();
String query = "UPDATE " + TABLE_NAME + " SET " + COL_2 + " = " + newName + " WHERE " + COL_2 + " = " + oldName;
db.execSQL(query);
/*Edit class,当我点击保存按钮时,我从单选按钮获取值并期望用编辑文本中的值更新数据库 */
buttonSave.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
int pos = listView.getCheckedItemPosition();
if (pos > -1) {
val = list.get(pos).toString(); //getting value from the radio button which is stored in the database
String newWord= edit.getText().toString(); //getting text from edit text
myDb.updateName( newWord,val );
}
您正在直接传递本机查询,因此您需要在字符串值上使用引号:
String query = "UPDATE " + TABLE_NAME + " SET " + COL_2 + " = \"" + newName + "\" WHERE " + COL_2 + " = \"" + oldName + "\"";
db.execSQL(query);
这将生成查询:
UPDATE Phrases_table SET word = "Word" WHERE word = "Wordc"
字符串值应该用单引号括起来:
public void updateName(String newName,String oldName) { // issue is here
SQLiteDatabase db = this.getWritableDatabase();
String query = "UPDATE " + TABLE_NAME + " SET " + COL_2 + " = '" + newName + "' WHERE " + COL_2 + " = '" + oldName + "'";
db.execSQL(query);
}
但是您应该使用推荐的更安全的方法 update()
以及 ContentValues
和 ?
占位符:
public void updateName(String newName, String oldName) { // issue is here
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(COL_2, newName);
db.update(TABLE_NAME, cv, COL_2 + "= ?", new String[] {oldName});
db.close();
}
这样您就不必担心添加单引号或 sql injection 的风险。
我正在尝试使用编辑文本中的值更新数据库。但我在记录器中收到错误消息:“*** Process: com.example.coursework2, PID: 12430 android.database.sqlite.SQLiteException: 没有这样的列: Wordc (code 1 SQLITE_ERROR): , 编译时: UPDATE Phrases_table SET word = Word WHERE word = Wordc 在 android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机方法)
Wordc 是存储在数据库中的单词,"Word" 是我试图更新数据库的值。我是新手,请帮忙。**
// 数据库 class, 我只有 1 列是 COL_2
public void updateName(String newName,String oldName) { // issue is here
SQLiteDatabase db = this.getWritableDatabase();
String query = "UPDATE " + TABLE_NAME + " SET " + COL_2 + " = " + newName + " WHERE " + COL_2 + " = " + oldName;
db.execSQL(query);
/*Edit class,当我点击保存按钮时,我从单选按钮获取值并期望用编辑文本中的值更新数据库 */
buttonSave.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
int pos = listView.getCheckedItemPosition();
if (pos > -1) {
val = list.get(pos).toString(); //getting value from the radio button which is stored in the database
String newWord= edit.getText().toString(); //getting text from edit text
myDb.updateName( newWord,val );
}
您正在直接传递本机查询,因此您需要在字符串值上使用引号:
String query = "UPDATE " + TABLE_NAME + " SET " + COL_2 + " = \"" + newName + "\" WHERE " + COL_2 + " = \"" + oldName + "\"";
db.execSQL(query);
这将生成查询:
UPDATE Phrases_table SET word = "Word" WHERE word = "Wordc"
字符串值应该用单引号括起来:
public void updateName(String newName,String oldName) { // issue is here
SQLiteDatabase db = this.getWritableDatabase();
String query = "UPDATE " + TABLE_NAME + " SET " + COL_2 + " = '" + newName + "' WHERE " + COL_2 + " = '" + oldName + "'";
db.execSQL(query);
}
但是您应该使用推荐的更安全的方法 update()
以及 ContentValues
和 ?
占位符:
public void updateName(String newName, String oldName) { // issue is here
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(COL_2, newName);
db.update(TABLE_NAME, cv, COL_2 + "= ?", new String[] {oldName});
db.close();
}
这样您就不必担心添加单引号或 sql injection 的风险。