Android:android.database.sqlite.SQLiteException:没有这样的列

时间:2013-05-01 22:15:14

标签: android sqlite

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个

2 个答案:

答案 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);

这会让你更有控制力,并清除愚蠢的错误。