【问题标题】:sqlite db updatesqlite 数据库更新
【发布时间】:2017-06-30 03:06:13
【问题描述】:

有没有一种简单的方法可以在 android 中更新 sqlite 中的表? (就像内置方法中的单行)?我有一个包含几列的表,主要是一列。我想通过主键搜索,然后更新表中的一行。

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    要与android中预定义的update方法一起使用,请按如下方式使用:

    ContentValues args = new ContentValues();
    args.put("col_name", "new value");
    
    db.update("table_name", args, String.format("%s = ?", "primary_column"),
               new String[]{"primary_id"});
    

    或者作为单行运行,使用这个(不推荐):

    db.execSQL("UPDATE table_name SET col_name='new_value' WHERE
               primary_column='primary_id'");
    

    【讨论】:

      【解决方案2】:

      阅读SQLiteDatabase.update的文档

      你应该得到这样的结果:

      affected = db.update(TABLE_NAME, values, where, whereArgs);

      UDPATE

      不惜一切代价避免使用容易出错的语法进行原始查询。我在这里看到很多使用大量'"' + SOMETHING + "'" 的答案......这是非常糟糕的做法,您将花费所有时间在难以找到的地方寻找错误或完全浪费时间。

      如果您必须使用原始查询,请尝试使用 String.format 形成它们以避免危险的调试会话和偏头痛。

      【讨论】:

      • 加一用于更新。总是更喜欢 db.update() 方法而不是手动原始查询。尝试存储包含撇号的 json 也会让你信服
      【解决方案3】:

      你可以像这样使用rawQuery

      cur = mDb.rawQuery("update " + TABLE_NAME
      + " set column1=mango where id='" + _id + "'",null);
      

      在哪里

      • curCursor 对象
      • TABLE_NAMENAME OF THE TABLE
      • _idname of the column(仅示例)

      【讨论】:

      • 谢谢我用了这个。 :) 非常感谢朋友的帮助! :)
      • 避免使用容易出错的语法,使用 string.format 来构建查询,即String.format("update %s set column1=%s where id='%s'",TABLE_NAME,"mango",_id)@Waqas 答案更正确,因为它允许在不更改代码的情况下更新可变数量的字段。
      【解决方案4】:

      那么你应该已经知道你的主键是什么了。

      dbHelper.getWritableDatabase();
      ContentValues values = createContentValues(profileVo);
      db.update(ProfileVO.TABLE_NAME, values, ProfileVO.COLUMN_ID + "=" + profile.getId(), null)
      

      这里有一个很好的教程http://www.vogella.com/articles/AndroidSQLite/article.html

      【讨论】:

        【解决方案5】:
        【解决方案6】:

        试试这个:

        public void updateFunction(int id) {
                    String updateStmnt  = "UPDATE  YOUR_TABLE SET YOUR_COLUMN = "
                            + id;
                    database.execSQL(updateStmnt);
                }
        

        希望它会有所帮助。

        【讨论】:

        • 考虑使用 string.format 而不是 + 字符串...它更易读且不易出错
        【解决方案7】:

        使用database.update 使其变得简单,如下所示:

        ContentValues values = new ContentValues();
            values.put(MySQLiteHelper.COLUMN_NAME, name);
            values.put(MySQLiteHelper.COLUMN_JOB, job);
            values.put(MySQLiteHelper.COLUMN_DATE_START, date_start);
            database.update(MySQLiteHelper.TABLE_EMPLOYEES, values, MySQLiteHelper.COLUMN_ID+"="+id, null);
        

        【讨论】:

          【解决方案8】:

          我知道这有点老了,但如果有人需要另一种方式:

          public boolean updateNote(Note note) {
              SQLiteDatabase db = notesDbHelper.getWritableDatabase();
          
              ContentValues contentValues = new ContentValues();
              contentValues.put(NotesDbContract.NoteEntry._ID, note.getId());
              contentValues.put(NotesDbContract.NoteEntry.COLUMN_NAME_TITLE, note.getTitle());
              contentValues.put(NotesDbContract.NoteEntry.COLUMN_NAME_DSECRIPTION, note.getDescription());
          
              int result = db.update(NotesDbContract.NoteEntry.TABLE_NAME,
                      contentValues,
                      NotesDbContract.NoteEntry._ID + "=?", new String[]{String.valueOf(note.getId())}
              );
              db.close();
          
              return result > 0;
          }
          

          【讨论】:

          • 谢谢,但还有什么方法,为什么db.close();
          • @CoolMind 我建议使用结果来获取关于我们的删除命令成功的返回标志,这样我们就可以根据它决定如何导航代码流,例如刷新视图以保存新值.
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-06-22
          • 2017-01-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多