【问题标题】:Android: android.database.sqlite.SQLiteException: no such columnAndroid:android.database.sqlite.SQLiteException:没有这样的列
【发布时间】:2013-04-25 23:53:51
【问题描述】:
Cursor cursor = db.query(UserTable, null, 
                "UserName=?", new String[] {username}, 
                null, null, AccessedDate);

当我试图打开我的活动时,我得到了这个 no column found 异常。错误指向上述query line

java.lang.RuntimeException:无法启动活动 组件信息{com.text.sample/com.text.sample.usercontext.RecentsActivity}: android.database.sqlite.SQLiteException:没有这样的列:用户名 (代码 1):,编译时: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(Looper.java:137) 在 android.app.ActivityThread.main(ActivityThread.java:5041) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 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(Native Method) 原因: android.database.sqlite.SQLiteException:没有这样的列:用户名 (代码 1):,编译时:SELECT * FROM Patient WHERE UserName=? ORDER BY AccessedDate 在 android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native 方法)在 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) 在 com.text.sample.usercontext.RecentsActivity.onCreate(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 更多

【问题讨论】:

  • 您确定该列存在吗?此外,您正在引用一个名为 UserTable 的变量,但它是从 Patient 表中选择的。对吗?
  • @JoeF:它引用了患者数据库,变量 UserTable 保存患者数据库值。
  • 您确定用户名在您的表格中拼写相同吗?
  • 有没有我可以手动删除数据库。
  • 清除设备中的数据

标签: android sqlite


【解决方案1】:

“我确定该列存在”的可能原因,但返回“没有这样的列”, 将是您的数据库以前安装了另一种格式,并且您在没有增加数据库版本的情况下更新了它,并使用 onUpgrade 来更新您的数据库。

如果这符合您的情况,请查看这篇文章,它会教您如何正确执行 onUpgrade: https://stackoverflow.com/a/14579351/1131470

【讨论】:

    【解决方案2】:

    我想将列命名为常量应该会有所帮助.. 这是最常见的错误之一,所以与其记住每列的名称,不如将其放在常量类或列类中作为静态最终成员然后访问它

    会是这样的:

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

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

    【讨论】:

      猜你喜欢
      • 2015-07-30
      • 2013-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多