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

我收到這個沒有列發現異常,當我試圖打開我的活動。錯誤指向上述query lineAndroid:android.database.sqlite.SQLiteException:沒有這樣的列

了java.lang.RuntimeException:無法啓動活動 ComponentInfo {com.text.sample/com.text.sample.usercontext.RecentsActivity}: android.database.sqlite.SQLiteException:沒有這樣的柱:用戶名 (code 1):,while compiling:SELECT * FROM Patient WHERE UserName =? ORDER BY 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)在 android.os.Looper.loop(尺蠖.java:137)at java.lang.reflect.Method.invoke(Method。 java:511) com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)at dalvik.system.NativeStart.main (Native Method)引起的: android.database.sqlite.SQLiteException:沒有這樣的列:UserName (code 1):,while compiling:SELECT * FROM Patient WHERE UserName =? ORDER BY AccessedDate在 android.database.sqlite.SQLiteConnection.nativePrepareStatement(母語 方法)在 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) at 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) 處 COM android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1200) 在com.text.sample.common.DAL.getAllPatients(DAL.java:104)。 text.sample.usercontext.RecentsActivity.onCreate(RecentsActivity.java:38) 在android.app.Activity.performCreate(Activity.java:5104)在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) ...11多

+0

你確定該列在那裏嗎?另外,您正在引用一個名爲'UserTable'的變量,但它正在從Patient表中進行選擇。那是對的嗎? – 2013-05-01 22:18:30

+0

@JoeF:它引用Patient DB,變量UserTable保存Patient DB值。 – Kevin 2013-05-01 22:19:14

+0

你確定用戶名在你的表中拼寫相同嗎? – 2013-05-01 22:22:47

回答

1

的「我敢肯定,列有」,但「沒有這樣的欄」返回一個可能的原因, 將以前已經安裝在您的數據庫中的另一個格式,你不增加更新它你的數據庫版本,並使用onUpgrade來更新你的數據庫。

如果你的情況相符,請看看這篇文章,教你如何正確地執行onUpgrade: https://stackoverflow.com/a/14579351/1131470

0

我猜命名列作爲常數應該幫助..這是一最常見的錯誤,所以不是每列的記住名字爲什麼不能在常量類或列類作爲靜態最終成員的地方,然後訪問它

這將是一些這樣的事:

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

這會給你更多的控制,並清除愚蠢的錯誤。