2013-05-01 99 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); 

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