【问题标题】:SQLite update query AndroidSQLite 更新查询 Android
【发布时间】:2014-01-16 13:36:10
【问题描述】:

该表包含 4 列:rowID、word、defintition、group_id

我想更改某行的单词和定义。所以这是我的代码(word 是存储 word、definition、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 下的行?

【问题讨论】:

    标签: java android sql


    【解决方案1】:
    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()) });
    

    【讨论】:

      【解决方案2】:
         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) });
      

      它将作为准备好的语句工作。 这段代码适用于我的情况.. 谢谢

      【讨论】:

        【解决方案3】:

        @Digvesh 有正确的想法,但是由于this limitation,将 int 转换为 String 以用作选择 arg 将无法正常工作。而是这样做:

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

        【讨论】:

          【解决方案4】:

          这对我有用,而 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;

          【讨论】:

            【解决方案5】:

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

            【讨论】:

              【解决方案6】:

              您可以使用 db.rawQuery 尝试此操作,即

              db.rawQuery("UPDATE "+ TABLE_WORDS + " SET "+ KEY_WORD + " = '"+word.getWord()+"' ,"+KEY_DEFINITION+"= '"+word.getDefinition()+ "' WHERE " + KEY_ID + " = "+word.getID(), null);
              

              这里你不需要创建任何ContentValues

              herehere 是详细信息

              【讨论】:

              • 我用 db.exec() 尝试了同样的查询。那么这两种方法有什么区别呢?
              • @user3199577 execSQL(String sql)execSQL(String sql, Object[] bindArgs) 两种方法都不返回任何数据,但 rawQuery(String sql, String[] selectionArgs) 将数据返回到 Cursor 对象中
              • @user3199577 如果上述查询有任何问题,请告诉我。
              • 这是错误 SQLiteDatabase 类型中的方法 rawQuery(String, String[]) 不适用于参数(String)
              • 我认为没有理由必须运行原始查询并不必要地使事情过于复杂。 update() 如果您知道如何在数据库中存储数据并且您正确地构造了 update() 查询,那么update() 将起作用。请看我的回答,因为这应该可行。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-12-26
              相关资源
              最近更新 更多