【问题标题】:android.database.sqlite.SQLiteException: no such table: USER_DATA_TABLE (code 1): , while compiling: SELECT * FROM USER_DATA_TABLE WHERE id=? LIMIT 1android.database.sqlite.SQLiteException: no such table: USER_DATA_TABLE (code 1): , while compile: SELECT * FROM USER_DATA_TABLE WHERE id=?限制 1
【发布时间】:2016-05-08 17:58:35
【问题描述】:

在模拟器上的 Android Studio 中运行 android 应用程序时,我遇到了一个非常奇怪的错误。错误粘贴在下面。

我没有将 SQLite 用于数据库。我正在使用共享表演。代码中没有对 USER_DATA_TABLE 或 SQLite 的引用。

我可以看到对 USER_DATA_TABLE 和 SQLite 的引用的唯一地方是 /build/generated/mockable-android-23.jar 文件,该文件显然是由构建过程生成的。在构建应用程序并运行之前,我删除了整个构建文件夹。

哪位专家能给我一些解决方法的线索吗?

访问SugarORM的代码sn-p是这样的:

   public void redrawNavMenu() {
    UserDataTable user = UserDataTable.findById(UserDataTable.class, 1L);

使用的 findById 方法在 SugarORM 中

public static <T extends SugarRecord<?>> T findById(Class<T> type, Long id) {
    List<T> list = find( type, "id=?", new String[]{String.valueOf(id)}, null, null, "1");
    if (list.isEmpty()) return null;
    return list.get(0);
}

我迷路了。那么如果 USER_DATA_TABLE 根本不在代码中,那么从哪里访问它呢?

日志:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.matt.quiz/com.matt.quiz.activities.QuizActivity}: android.database.sqlite.SQLiteException: no such table: USER_DATA_TABLE (code 1): , while compiling: SELECT * FROM USER_DATA_TABLE WHERE id=? LIMIT 1
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
        at android.app.ActivityThread.-wrap11(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5417)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
     Caused by: android.database.sqlite.SQLiteException: no such table: USER_DATA_TABLE (code 1): , while compiling: SELECT * FROM USER_DATA_TABLE WHERE id=? LIMIT 1
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
        at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
        at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
        at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316)
        at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1163)
        at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1034)
        at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1240)
        at com.orm.SugarRecord.find(SugarRecord.java:208)
        at com.orm.SugarRecord.findById(SugarRecord.java:138)
        at com.matt.quiz.activities.QuizActivity.redrawNavMenu(QuizActivity.java:461)
        at com.matt.quiz.activities.QuizActivity.onCreate(QuizActivity.java:194)
        at android.app.Activity.performCreate(Activity.java:6237)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
        at android.app.ActivityThread.-wrap11(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:148) 
        at android.app.ActivityThread.main(ActivityThread.java:5417) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

【问题讨论】:

  • 在 SQLite 错误之前,我看到购买设置错误 05-08 18:36:03.032 2573-2573/com.matt.quiz E/Purchase setup: 出了点问题 - 如何解决这个问题?
  • “我没有在数据库中使用 SQLite”——是的,你是,通过 SugarORM,你可以从堆栈跟踪中看出这一点。请提供minimal reproducible example,在这种情况下将包含QuizActivity 的源代码。
  • Tx 快速回复,是的,你是对的,这里提到了 SugarORM,但同样是在构建文件中,而不是在我的代码中。我已经更新了问题以显示代码 sn-p 调用它的位置,如您在日志中看到的那样。如果您需要更多代码 sn-ps,请告诉我。
  • “但同样是在构建文件中,而不是我的代码”——你的代码有UserDataTable user = UserDataTable.findById(UserDataTable.class, 1L);。根据您的堆栈跟踪,UserDataTable 似乎扩展了SugarRecord,这当然适合the Sugar ORM documentation。我不知道为什么它没有按照文档建议的方式为您创建表格,因为我从未使用过 Sugar ORM。
  • 我建议您阅读the documentation,因为您似乎对自己在做什么感到困惑。 Sugar ORM 是“简化与 SQLite 数据库的交互”。如果您不想使用 SQLite,请停止使用 Sugar ORM。

标签: java android sqlite android-studio


【解决方案1】:

终于自己找到了答案。这与清单文件中的数据库版本有关。该版本需要增量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 2022-11-20
    • 2013-05-22
    • 1970-01-01
    • 2015-04-24
    相关资源
    最近更新 更多