Cursor cursor = db.query(UserTable, null,
"UserName=?", new String[] {username},
null, null, AccessedDate);
当我尝试打开我的活动时,我得到这个没有找到列的异常。该错误指向上述query line
。
java.lang.RuntimeException:无法启动活动 ComponentInfo {com.text.sample / com.text.sample.usercontext.RecentsActivity}: android.database.sqlite.SQLiteException:没有这样的列:UserName (代码1):,编译时:SELECT * FROM Patient WHERE UserName =? 通过AccessedDate订购 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 在android.app.ActivityThread.access $ 600(ActivityThread.java:141) 在 android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1234) 在android.os.Handler.dispatchMessage(Handler.java:99)at android.os.Looper.loop(Looper.java:137)at android.app.ActivityThread.main(ActivityThread.java:5041)at java.lang.reflect.Method.invokeNative(Native Method)at java.lang.reflect.Method.invoke(Method.java:511)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)at dalvik.system.NativeStart.main(Native方法)引起: android.database.sqlite.SQLiteException:没有这样的列:UserName (代码1):,编译时:SELECT * FROM Patient WHERE UserName =? 通过AccessedDate订购 android.database.sqlite.SQLiteConnection.nativePrepareStatement(母语 方法)at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882) 在 android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493) 在 android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 在 android.database.sqlite.SQLiteProgram。(SQLiteProgram.java:58) 在android.database.sqlite.SQLiteQuery。(SQLiteQuery.java:37) 在 android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44) 在 android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314) 在 android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1161) 在 android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1032) 在 android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1200) 在com.text.sample.common.DAL.getAllPatients(DAL.java:104)at com.text.sample.usercontext.RecentsActivity.onCreate(RecentsActivity.java:38) 在android.app.Activity.performCreate(Activity.java:5104)at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) ......还有11个
答案 0 :(得分:1)
可能的原因是“我确定列在那里”,但是“没有这样的列”被返回, 将是您的数据库以前安装了另一种格式,并在不增加db版本的情况下更新它,并使用onUpgrade更新数据库。
如果这符合你的情况,请看看这篇文章,它会教你如何正确执行onUpgrade: https://stackoverflow.com/a/14579351/1131470
答案 1 :(得分:0)
我想将列命名为常量应该有帮助..这是最常见的错误之一,所以不要记住每列的名称,为什么不将常量类或列类放在静态最终成员中然后访问它
这将是这样的事情:
Cursor cursor = db.query(UserTable, null,
UserColumn.USER_NAME + "=?", new String[] {username},
null, null, UserColumn.ACCESSED_DATE);
这会让你更有控制力,并清除愚蠢的错误。