Java SQLite更新查询Android

Java SQLite更新查询Android,java,android,sql,Java,Android,Sql,该表包含4列:行id、字、定义、组id 我想更改某一行的单词和定义。这是我的代码(word是存储单词、定义、id和组id的对象) 有人能告诉我为什么它只创建一个新行而不更改给定ID下的行吗?使用LIKE代替=运算符 SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(KEY_NAME, contact.getN

该表包含4列:行id、字、定义、组id

我想更改某一行的单词和定义。这是我的代码(word是存储单词、定义、id和组id的对象)


有人能告诉我为什么它只创建一个新行而不更改给定ID下的行吗?

使用LIKE代替=运算符

SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, contact.getName());
        values.put(KEY_DATE, contact.getDate());

        // updating row
        return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
                new String[] { String.valueOf(contact.getID()) });
SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, contact.getName());
        values.put(KEY_DATE, contact.getDate());

        // updating row
        return db.update(TABLE_CONTACTS, values, KEY_ID + " LIKE ?",
                new String[] { String.valueOf(contact.getID()) });

您可以使用
db.rawQuery
,即

db.rawQuery("UPDATE "+ TABLE_WORDS + " SET "+ KEY_WORD + " = '"+word.getWord()+"' ,"+KEY_DEFINITION+"= '"+word.getDefinition()+ "' WHERE " + KEY_ID + " = "+word.getID(), null);
在这里,您不需要创建任何
ContentValues


和are details

@Digvesh的想法是正确的,但由于,将int转换为字符串以用作选择参数将无法正常工作。而是这样做:

// assume: SQLiteDatabase db = this.getWritableDatabase();

ContentValues values = new ContentValues();
values.put(KEY_WORD, word.getWord());
values.put(KEY_DEFINITION, word.getDefinition());
int rowsUpdated = db.update(TABLE_WORDS, values, KEY_ID + "=" + word.getID(), null);
它将按照事先准备好的声明工作。
这段代码在我的情况下起作用了。。谢谢

为我完成了这项工作,而db.rawquery不起作用

输出查询

String qu=“UPDATE”+数据库\表格\数据+“SET”+isbookmark+“=”+状态+“其中id=“+uid+”;”;
db.execSQL(qu);
输出查询:

更新tabel_数据集'isbookmark`=1,其中id=2720271我用db.exec()尝试了相同的查询。那么这两种方法有什么区别呢?@user3199577
execSQL(String-sql)
execSQL(String-sql,Object[]bindArgs)
这两种方法都不返回任何数据,但
rawQuery(String-sql,String[]selectionArgs)
将数据返回到
光标中
object@user3199577如果上面的查询有任何问题,请告诉我。这是一个错误,类型SQLiteDatabase中的方法rawQuery(String,String[])不适用于参数(String),我认为没有理由必须运行原始查询,并且不必要地使事情过于复杂<如果您知道如何在数据库中存储数据,并且正确地构造了
update()
查询,那么code>update()将起作用。请看我的答案,因为这应该有效。
db.rawQuery("UPDATE "+ TABLE_WORDS + " SET "+ KEY_WORD + " = '"+word.getWord()+"' ,"+KEY_DEFINITION+"= '"+word.getDefinition()+ "' WHERE " + KEY_ID + " = "+word.getID(), null);
// assume: SQLiteDatabase db = this.getWritableDatabase();

ContentValues values = new ContentValues();
values.put(KEY_WORD, word.getWord());
values.put(KEY_DEFINITION, word.getDefinition());
int rowsUpdated = db.update(TABLE_WORDS, values, KEY_ID + "=" + word.getID(), null);
   String id = "1";
   SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(COLUMN_NOTIFICATION_STATUS,"canceled");
    db.update(TABLE_NOTIFICATION, values,COLUMN_NOTIFICATION_ID + " = ? ",new String[]{ String.valueOf(id) });