1
Cursor cursor = db.query(UserTable, null, 
                "UserName=?", new String[] {username}, 
                null, null, AccessedDate);

当我试图打开我的活动时,我得到这个没有发现列的异常。错误指向上述query line

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.text.sample/com.text.sample.usercontext.RecentsActivity}: android.database.sqlite.SQLiteException: no such column: UserName (code 1): , while compile : SELECT * FROM Patient WHERE UserName=? ORDER BY AccessedDate at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) at android.app.ActivityThread.access$600(ActivityThread.java:141) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app .ActivityThread.main(ActivityThread.java:5041) 在 java.lang.reflect.Method。在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 在 com.android.internal 的 java.lang.reflect.Method.invoke(Method.java:511) 的 invokeNative(Native Method)。 os.ZygoteInit.main(ZygoteInit.java:560) at dalvik.system.NativeStart.main(Native Method) 原因:android.database.sqlite.SQLiteException: no such column: UserName (code 1): , while compile: SELECT * 来自患者 WHERE 用户名=?ORDER BY AccessedDate at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882) at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493 ) 在 android.database 的 android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)。

4

2 回答 2

1

“我确定该列存在”但返回“没有这样的列”的可能原因是您的数据库以前安装了另一种格式,并且您在没有增加数据库版本的情况下更新了它,并使用 onUpgrade 进行更新你的数据库。

如果这符合您的情况,请查看这篇文章,它教您如何正确执行 onUpgrade: https ://stackoverflow.com/a/14579351/1131470

于 2013-05-02T02:48:37.850 回答
0

我想将列命名为常量应该会有所帮助.. 这是最常见的错误之一,所以与其记住每列的名称,不如将其放在常量类或列类中作为静态最终成员然后访问它

它会是这样的:

Cursor cursor = db.query(UserTable, null, 
            UserColumn.USER_NAME + "=?", new String[] {username}, 
            null, null, UserColumn.ACCESSED_DATE);

这会给你更多的控制和清除愚蠢的错误。

于 2016-06-15T09:59:01.787 回答