我试图更新我的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
的{{1}}的值来自班级pemegang_polis
。我又得到了错误,这是我的logcat说:
Menu_SPPAJ.getX()
我不知道我的错在哪里,我觉得一切都很好,有什么我想念的或其他什么吗?我希望有人能理解我的问题,能帮助我解决问题,非常感谢你。
答案 0 :(得分:1)
android.database.sqlite.SQLiteException:near“。01”:语法错误(代码1):,编译时: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 :(得分:1)
update()的第三个参数用于保存where条件。
您的第一次尝试"SPAJ_ID=SPAJ_ID"
对于所有行都适用,因为每一行都在每个列中都有一个匹配...本身的值。
如果您的条件包括针对给定值检查SPAJ_ID列,请使用:
“SPAJ_ID =” + yourVal
其中yourVal是您要用于过滤的ID。如果您的ID是String类型,请记住包含引号。
如果是String类型,请使用:
"SPAJ_ID='"+yourVal+"'"