簡體   English   中英

Android:android.database.sqlite.SQLiteException:無此類列

[英]Android: android.database.sqlite.SQLiteException: no such column

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 =? 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)處按ORDER BY AccessedDate在android.app.ActivityThread.access $ 600(ActivityThread.java:141)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)在android.os.Looper.loop(Looper.java:137)處的android.os.Handler.dispatchMessage(Handler.java:99)處的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1234) .ActivityThread.main(ActivityThread.java:5041)(位於java.lang.reflect.Method.invokeNative(本機方法)(位於java.lang.reflect.Method.invoke(Method.java:511))(位於com.android.internal.os) .ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)在dalvik.system.NativeStart.main(本機方法)造成原因:android.database .sqlite.SQLiteException:無此類列:UserName(代碼1):,而在編譯時:SELECT * FROM Patient WHERE UserName =? 在android.database.sqlite.SQLiteConnection.nativePrepareStatement(本機方法)處的ORDER BY AccessedDate(在android.database.sqlite.SQLite上的本地方法)(SQLiteConnection.java:882)在android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493上) )位於android.database.sqlite.SQLiteQuery。(SQLiteQuery.java:37)的android.database.sqlite.SQLiteProgram。(SQLiteProgram.java:58)的android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)在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),位於com.text.sample.usercontext.RecentsActivity.onC reate(RecentsActivity.java:38)在android.app.Activity.performCreate(Activity.java:5104)在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)在android.app.ActivityThread.performLaunchActivity(ActivityThread.java :2144)...還有11個

可能的原因是“我確定該列在那里”,但是返回“沒有這樣的列”,這可能是您的數據庫以前安裝了另一種格式,並且您在不增加數據庫版本的情況下對其進行了更新,並且使用onUpgrade進行了更新您的數據庫。

如果這符合您的情況,請查看此帖子,它教您如何正確執行onUpgrade: https ://stackoverflow.com/a/14579351/1131470

我想將列命名為常量應該有所幫助..這是最常見的錯誤之一,因此與其記住每個列的名稱,為什么不將其作為常量最終成員放在常量類或列類中,然后再訪問它

將會是這樣的:

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

這將給您更多的控制權,並消除一些愚蠢的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM