SQLite 更新查询 Android

10
表格包含四列:rowID,word,definition,group_id。
我想要更改某一行的单词和定义。这是我的代码(word 是一个对象,其中存储了单词、定义、ID 和 group_id)。
   ContentValues values = new ContentValues();
    values.put(KEY_WORD, word.getWord());
    values.put(KEY_DEFINITION, word.getDefinition());
    db.update(TABLE_WORDS, values, KEY_ID, new String [] {String.valueOf(word.getID())});

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

6个回答

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

4
   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) });

它将作为预处理语句运行。 这段代码在我的情况下起作用了..谢谢


1

@Digvesh 的想法是正确的,但由于 这个限制,将 int 转换为 String 以用作选择参数将无法正常工作。而应该这样做:

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

1
这对我有用,而db.rawquery没有起作用。
输出查询

String qu="UPDATE "+ DATABASE_TABLE_DATA + " SET "+isbookmark+" = "+status+" WHERE id = "+uid+";";
db.execSQL(qu);

output query :
UPDATE tabel_data SET `isbookmark` = 1 WHERE id = 2720271;


0

使用 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 + " LIKE ?",
                new String[] { String.valueOf(contact.getID()) });

-2
你可以使用 db.rawQuery 进行尝试。
db.rawQuery("UPDATE "+ TABLE_WORDS + " SET "+ KEY_WORD + " = '"+word.getWord()+"' ,"+KEY_DEFINITION+"= '"+word.getDefinition()+ "' WHERE " + KEY_ID + " = "+word.getID(), null);

在这里,您不需要创建任何ContentValues

这里这里是详细信息。


1
我尝试使用db.exec()执行相同的查询。那么这两种方法之间有什么区别? - user3199577
@user3199577 execSQL(String sql)execSQL(String sql, Object[] bindArgs) 方法都不返回任何数据,但 rawQuery(String sql, String[] selectionArgs) 方法将数据返回到 Cursor 对象中。 - Mukesh Kumar Singh
@user3199577 如果上面的查询有任何问题,请告诉我。 - Mukesh Kumar Singh
这是错误 类型 SQLiteDatabase 中的方法 rawQuery(String, String[]) 不适用于参数 (String) - user3199577
1
我不认为有必要运行原始查询并不必要地使事情过于复杂化。如果您知道如何在数据库中存储数据并正确构造update()查询,则update()将起作用。请查看我的答案,因为这应该有效。 - anddev84
@anddev84 运行原始查询并不会使事情变得复杂,因为“update()`”函数在内部执行相同的SQL查询。 - Mukesh Kumar Singh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接