【问题标题】:sqlite android Update with punctation带有标点的sqlite android更新
【发布时间】:2018-02-20 03:40:44
【问题描述】:

我的查询有问题 这是我的 sqllite 表

CREATE_CONFIG_TABLE = "CREATE TABLE " + TABLE_Config + "("
            + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + KEY_VersioneAPP + " TEXT"
            + ")";

在哪里

 private static final String TABLE_Config = "Configurazioni";
 private static final String KEY_VersioneAPP = "VersioneAPP";

我想更新“VersioneAPP”并进行如下查询:-

db.rawQuery("UPDATE " + TABLE_Config + " SET " + seleziona + " = ?",
            new String[] { NuovaVersione });

我也试过了

String selezionata = "UPDATE " + TABLE_Config + " SET (" + seleziona + ") = ('"+ NuovaVersione+"')";
db.execSQL(selezionata);

NuovaVersione 是一个字符串,如 10.2.3 或 1.2 如果我使用 NuovaVersione=1.2 进行查询,它会起作用。 但如果我尝试使用 10.2.3,我会收到以下错误:

致命异常:主要
进程:it.asfautolinee.pulizie,PID:15890 java.lang.RuntimeException:无法启动活动 组件信息{it.asfautolinee.pulizie/it.asfautolinee.pulizie.Login}: android.database.sqlite.SQLiteException:接近“.3”:语法错误(代码 1): ,编译时:UPDATE Con​​figurazioni SET VersioneAPP = 10.2.3

################################################# ######### 错误代码:1(SQLITE_ERROR) 原因:SQL(查询)错误或丢失

database.(near ".3": syntax error (code 1): , while compile: UPDATE 配置 SET VersioneAPP = 10.2.3)

有人可以帮帮我吗?

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    我想更新“VersioneAPP”并进行这样的查询 db.rawQuery("UPDATE " + TABLE_Config + " SET " + seleziona + " = ?", new String[] { NuovaVersione });

    使用 execSQL() 而不是 rawQuery() 来运行原始的非查询 SQL 语句。

    rawQuery() 只编译 SQL 不运行它(它只在返回的Cursor 被移动时运行)。 execSQL() 编译和运行 SQL 但不能返回结果。

    语法错误是因为您没有引用字符串文字,它被解释为数字文字。只需使用? 变量即可。

    【讨论】:

    • 感谢您的回复!我试过这个 db.execSQL("UPDATE " + TABLE_Config + " SET " + seleziona + " = ?", new String[] { NuovaVersione });但我有同样的问题。请给我写正确的查询。
    • execSQL() 绑定参数是 Object[] 不是 String[]。但你不应该遇到“同样的问题”
    【解决方案2】:
     db.execSQL("UPDATE " + TABLE_NAME + " SET " + columnname + "=" + valuetoupdate + " WHERE " + conditioncolumn+ "=?",
                        new String[] {valueofcondition may be id});
    

    【讨论】:

      【解决方案3】:

      接受 1.2 但不接受 10.2.3 的原因是,如果未引用该值,则需要一个数字 1.2 是有效数字 10.2.3 不是。

      但是,我建议使用推荐的 SQLiteDatabase 更新便捷方法。

      没有办法返回任何数据(比如受影响的人数 行)。相反,我们鼓励您使用 insert(String, String, ContentValues), update(String, ContentValues, String, String[]) 等 人,如果可能的话。 execSQL

      您的代码将是:-

      ContentValues cv = new Contentvalues();
      cv.put(seleziona,NuovaVersione);
      db.update(TABLE_Config,cv,null,null);
      

      便捷方法将构建适当的查询。此外,它将以 int 形式返回更新的数量(例如 int number_of_updates = db.update(TABLE_Config,cv,null);update

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-04
        • 2021-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-02
        • 2020-08-31
        • 1970-01-01
        相关资源
        最近更新 更多