【问题标题】:can't update a row in android sqlite无法更新 android sqlite 中的一行
【发布时间】:2014-01-12 09:29:24
【问题描述】:

当我第一次尝试如下更新时,我尝试在我的 sqlite 上的一个表中更新一行:

    public void updateMasterSPAJ(
            String nama_pp,
            String gelar_pp,
            String ibu_pp,
            String hubungan_pp,
            int spinner_hubungan_pp 
        ) {
    ContentValues cv=new ContentValues();
        cv.put("nama_pp", nama_pp);
        cv.put("gelar_pp", gelar_pp);
        cv.put("ibu_pp", ibu_pp);
        cv.put("hubungan_pp", hubungan_pp);
        cv.put("spinner_hubungan_pp", spinner_hubungan_pp); 
    getWritableDatabase().update("pemegang_polis", cv, "SPAJ_ID=SPAJ_ID", null);
}

但此代码将更新所有行,而不是特定行,因此我在此行中更改我的代码getWritableDatabase().update("pemegang_polis", cv, "SPAJ_ID=SPAJ_ID", null); 进入

`getWritableDatabase().update("pemegang_polis", cv, "pemegang_polis.SPAJ_ID=master_spaj.SPAJ_ID", null);` 

我遇到了错误,这是我的 logcat 说的:

android.database.sqlite.SQLiteException: no such column: master_spaj.SPAJ_ID (code 1): , while compiling: UPDATE pemegang_polis SET spinner_hubungan_pp=?,ibu_pp=?,hubungan_pp=?,nama_pp=?,gelar_pp=? WHERE pemegang_polis.SPAJ_ID=master_spaj.SPAJ_ID

然后我将该行更改为:

    a=Menu_SPPAJ.getX();
    getWritableDatabase().update("pemegang_polis", cv, "SPAJ_ID="+ a, null);

因为来自SPAJ_ID 的值来自pemegang_polis 是从类Menu_SPPAJ.getX() 中获得的。我又遇到了错误,这是我的 logcat 说的:

android.database.sqlite.SQLiteException: near ".01": syntax error (code 1): , while compiling: UPDATE pemegang_polis SET spinner_hubungan_pp=?,ibu_pp=?,hubungan_pp=?,nama_pp=?,gelar_pp=? WHERE SPAJ_ID=AndroidESPAJ2014.01.12.04.20.04.568

我不知道我的错在哪里,我认为一切都很好,是我想念的东西还是其他什么?我希望有人能理解我的问题,可以帮助我解决我的问题,非常感谢。

【问题讨论】:

    标签: java android sqlite sql-update


    【解决方案1】:

    android.database.sqlite.SQLiteException: near ".01": syntax error (code 1): , while compile: UPDATE pemegang_polis SET spinner_hubungan_pp=?,ibu_pp=?,hubungan_pp=?,nama_pp=?,gelar_pp=? WHERE SPAJ_ID=AndroidESPAJ2014.01.12.04.20.04.568

    SPAJ_ID 值 AndroidESPAJ2014.01.12.04.20.04.568 看起来像字符串文字,但不像 'string literal' 那样被引用。

    但是,最好使用 ? 文字占位符和绑定参数:

    getWritableDatabase().update("pemegang_polis", cv, "SPAJ_ID=?", new String[] { a });
    

    【讨论】:

    • 你回答得比我好。 +1 对您对preparedstatement 内容的回答。
    • @laalto 我试过你的代码,没有更新的行。
    • @AoyamaNanami 然后你必须弄清楚你需要使用数据库中的数据的where 条件。我们只能使用您问题中提供的信息。
    • 我更喜欢使用 SPAJ_ID=master_spaj.SPAJ_ID 但我总是收到错误说没有这样的列:master_spaj.SPAJ_ID
    • 是的,这没有任何意义,因为查询中没有名称为 master_spaj 的表或表别名。
    【解决方案2】:

    update() 的第三个参数是用来保存 where 条件的。

    您的第一次尝试"SPAJ_ID=SPAJ_ID" 对所有行都是正确的,因为每一行在每一列中都有一个匹配的值...本身。

    如果您的条件包括根据给定值检查 SPAJ_ID 列,请使用:

    "SPAJ_ID="+yourVal

    其中 yourVal 是您要用于过滤的 ID。如果您的 ID 是字符串类型,请记住包含引号。

    如果是字符串类型,只需使用:

    "SPAJ_ID='"+yourVal+"'"
    

    【讨论】:

    • 我已经用“SPAJ_ID="+ a 尝试过你的方法,但我遇到了错误
    • 因为你错过了引号。
    • 您应该将 yourValue 设置为您要更新的 id 的值。还要确保实际设置的值与 Db 中当前设置的值不同。
    猜你喜欢
    • 2017-06-01
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 2012-05-28
    • 2014-04-17
    • 2020-12-22
    相关资源
    最近更新 更多