首页 > 解决方案 > Android Studio Java 中的 SQLite 更新数据库行

问题描述

我想使用以下代码更新 SQLite 数据库行:

public void  updateProfile(String profileName, String col3, String col4, String col5, String col6, String col7, String col8, String col9, String col10, String col11, String col12, String col13, String col14, String col15, String col16, String col17){
    SQLiteDatabase db = this.getWritableDatabase();
    String query = "UPDATE " + TABLE_NAME + " SET "
            + COL3 + " = '" + col3
            + COL4 + " = '" + col4
            + COL5 + " = '" + col5
            + COL6 + " = '" + col6
            + COL7 + " = '" + col7
            + COL8 + " = '" + col8
            + COL9 + " = '" + col9
            + COL10 + " = '" + col10
            + COL11 + " = '" + col11
            + COL12 + " = '" + col12
            + COL13 + " = '" + col13
            + COL14 + " = '" + col14
            + COL15 + " = '" + col15
            + COL16 + " = '" + col16
            + COL17 + " = '" + col17
            + "' WHERE " + COL2 + " = '" + profileName + "'";

    Log.d(TAG, "update Profile: " + profileName);
    db.execSQL(query);
}     

出于某种原因,我得到了一些错误。

标签: javaandroidsqliteandroid-sqlite

解决方案


您有两个反复出现的错误/错误:-

  1. 您省略了围绕正在设置的值的单引号,并且
  2. 您省略了各个集合子句之间的 , (逗号)。

你要 :-

public int  updateProfile(String profileName, String col3, String col4, String col5, String col6, String col7, String col8, String col9, String col10, String col11, String col12, String col13, String col14, String col15, String col16, String col17){
    SQLiteDatabase db = this.getWritableDatabase();
    String query = "UPDATE " + TABLE_NAME + " SET "
            + COL3 + " = '" + col3 + "',"
            + COL4 + " = '" + col4 + "',"
            + COL5 + " = '" + col5 + "',"
            + COL6 + " = '" + col6 + "',"
            + COL7 + " = '" + col7 + "',"
            + COL8 + " = '" + col8 + "',"
            + COL9 + " = '" + col9 + "',"
            + COL10 + " = '" + col10 + "',"
            + COL11 + " = '" + col11 + "',"
            + COL12 + " = '" + col12 + "',"
            + COL13 + " = '" + col13 + "',"
            + COL14 + " = '" + col14 + "',"
            + COL15 + " = '" + col15 + "',"
            + COL16 + " = '" + col16 + "',"
            + COL17 + " = '" + col17
            + "' WHERE " + COL2 + " = '" + profileName + "'";

    Log.d(TAG, "update Profile: " + profileName);
    db.execSQL(query);
}
  • 请注意,以上内容未经测试,但原则上是您想要的。

然而;

更简单且不易出错的方法是让 SQLiteDatabase更新便捷方法为您完成生成 SQL 的工作。因此,我建议使用:-

public void  updateProfile(String profileName, String col3, String col4, String col5, String col6, String col7, String col8, String col9, String col10, String col11, String col12, String col13, String col14, String col15, String col16, String col17){

    ContentValues cv = new ContentValues();
    cv.put(COL3,col3);
    cv.put(COL4,col4);
    cv.put(COL5,col5);
    cv.put(COL6,col6);
    cv.put(COL7,col7);
    cv.put(COL8,col8);
    cv.put(COL9,col9);
    cv.put(COL10,col10);
    cv.put(COL11,col11);
    cv.put(COL12,col12);
    cv.put(COL13,col13);
    cv.put(COL14,col14);
    cv.put(COL15,col15);
    cv.put(COL16,col16);
    cv.put(COL17,col17);
    SQLiteDatabase db = this.getWritableDatabase();
    Log.d(TAG, "update Profile: " + profileName);
    return db.update(TABLE_NAME,cv,COL2 + "=?",new String[]{profileName};
 
}
  • 同样,此代码尚未经过测试或运行,因此可能包含一些错误。
  • 请注意上面更新方法的链接。
  • 注意已经public int updateProfile使用,这意味着将返回已更新的行数,这可能很有用。
  • ,COL2 + "=?"是说绑定参数,也就是?用 String[] 的值替换 。
    • 多个 ? 可用于更复杂的情况,在哪种情况下是第一个 ? 将被 String[] 中的第一个元素替换,第二个 ? 将被 String[] 中的第二个元素替换,依此类推。

推荐阅读