【问题标题】:no such column: _id SQLite error Android没有这样的列:_id SQLite 错误 Android
【发布时间】:2010-08-21 04:14:00
【问题描述】:

我得到一个没有这样的列:_id 错误。是的,我的日志表中有一个“_id”列。

我收到此代码的错误:

mDb.execSQL("UPDATE"+DATABASE_PLANTS_TABLE+"SET"+KEY_PLANT_DAYS+ " = (SELECT COUNT(*) FROM "+DATABASE_PLANTS_TABLE+" WHERE " +DATABASE_JOURNAL_TABLE+"."+KEY_JROWID+" = "+DATABASE_PLANTS_TABLE +"." +KEY_PLANT_HOMEID+")");

以下代码有效:

mDb.execSQL("更新 "+DATABASE_JOURNAL_TABLE+" 设置 "+KEY_JOURNAL_PLANTS+ " = (SELECT COUNT(*) FROM "+DATABASE_PLANTS_TABLE+" WHERE " +DATABASE_JOURNAL_TABLE+"."+KEY_JROWID+" = "+DATABASE_PLANTS_TABLE +"." +KEY_PLANT_HOMEID+")");

LogCat:

08-21 00:07:46.614: 错误/数据库(12943): 失败 1 (没有这样的列: journals._id) 在 0x421470 上准备“更新植物 SET 天 = (SELECT COUNT(*) FROM 植物 WHERE journals._id =植物.homeid)'。 08-21 00:07:46.614: 调试/AndroidRuntime(12943): 关闭虚拟机 08-21 00:07:46.614: WARN/dalvikvm(12943): threadid=3: 线程以未捕获的异常退出 (group=0x4001b390) 08-21 00:07:46.614:错误/AndroidRuntime(12943):未捕获的处理程序:线程主因未捕获的异常而退出 08-21 00:07:46.624: 错误/AndroidRuntime(12943): java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.growjournal.beta/com.grower.beta.plantsList}: android.database.sqlite.SQLiteException : 没有这样的列: journals._id: UPDATE 植物 SET days = (SELECT COUNT(*) FROM 植物 WHERE journals._id =plants.homeid) 08-21 00:07:46.624: 错误/AndroidRuntime(12943): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2596) 08-21 00:07:46.624: 错误/AndroidRuntime(12943): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2621) 08-21 00:07:46.624: 错误/AndroidRuntime(12943): 在 android.app.ActivityThread.access$2200(ActivityThread.java:126) 08-21 00:07:46.624: 错误/AndroidRuntime(12943): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1932) 08-21 00:07:46.624: 错误/AndroidRuntime(12943): 在 android.os.Handler.dispatchMessage(Handler.java:99) 08-21 00:07:46.624: 错误/AndroidRuntime(12943): 在 android.os.Looper.loop(Looper.java:123) 08-21 00:07:46.624: 错误/AndroidRuntime(12943): 在 android.app.ActivityThread.main(ActivityThread.java:4595) 08-21 00:07:46.624: 错误/AndroidRuntime(12943): 在 java.lang.reflect.Method.invokeNative(Native Method) 08-21 00:07:46.624: 错误/AndroidRuntime(12943): 在 java.lang.reflect.Method.invoke(Method.java:521) 08-21 00:07:46.624: 错误/AndroidRuntime(12943): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 08-21 00:07:46.624: 错误/AndroidRuntime(12943): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 08-21 00:07:46.624:错误/AndroidRuntime(12943):在 dalvik.system.NativeStart.main(本机方法) 08-21 00:07:46.624: 错误/AndroidRuntime(12943): 由: android.database.sqlite.SQLiteException: 没有这样的列: journals._id: UPDATE 植物 SET days = (SELECT COUNT(*) FROM 植物 WHERE journals ._id = 植物.homeid) 08-21 00:07:46.624:错误/AndroidRuntime(12943):在 android.database.sqlite.SQLiteDatabase.native_execSQL(本机方法)

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    您没有检查期刊表! “FROM”确定您要查看的表。您可能想要进行内部联接?

    【讨论】:

    • 不确定你的意思。在有效的代码中,我引用了两个单独的表。
    • 不,你没有。就像我说的,FROM 决定了你访问哪个表。您说的是“FROM 植物”,因此您只能访问“植物”表中的数据。您将完全无法访问“期刊”中的任何内容。您需要使用 JOIN 语句,或者在 FROM 部分中有两个表。
    • 虽然这是正确的答案,但您能解释一下为什么我仍然能够与 WHERE 语句中的植物表进行比较吗?
    • 第二种方法在查询的外部(UPDATE)中使用journal 表,在内部(SELECT)中使用plants 表,因此两个表都被访问。在 UPDATE 语句中,UPDATE 指令后面的表指定正在读取和修改的表。
    猜你喜欢
    • 1970-01-01
    • 2017-02-09
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    相关资源
    最近更新 更多