【问题标题】:Codename One and SQLite error代号一和 SQLite 错误
【发布时间】:2017-10-28 12:33:32
【问题描述】:

我使用 CN1 编写了一个访问 sqlite 数据库的应用程序。当我使用 Netbeans 在模拟器中运行应用程序时,它运行良好。但是,当我尝试连接到实际设备上的数据库时,出现此错误...

java,lang,NullPointerException: Attempt to invoke virtual method 'void.com.codename1.db.Database.close()' on a null object reference

我已经通过我的代码尝试查看我是否在创建数据库实例之前进行了“关闭”,但我看不到它 - 如果我这样做了,那么我预计它会在模拟器对吧?

感谢任何帮助

谢谢

【问题讨论】:

  • 你用什么代码打开数据库?日志中的路径明显错误
  • 我不确定它是如何工作的 - 所以这里是我的示例代码的链接...docs.google.com/document/d/… --- 即使它不正确,它也不能在模拟器中工作,对吧?
  • 所以我刚刚调试了我的代码,有一次我可以看到以下值:conn.url=jdbc:sqlite:/home/stevenmarkintegration/.cn1/database/MyDB.db 和 conn .filename=/home/stevenmarkintegration/.cn1/database/MyDB.db .... 现在我的手机上不存在这些路径 - 这可能是原因 - 还是我离题了?

标签: codenameone


【解决方案1】:

在你的代码中你这样做:

dbPath = Display.getInstance().getDatabasePath("MyDB.db");
if(dbPath != null && !FileSystemStorage.getInstance().exists(dbPath)) {
        copyDb(dbPath);
    }
}

然后你做:

db = Display.getInstance().openOrCreate(dbPath);

这是一个错误,我有点惊讶这在模拟器中有效。你需要使用:

db = Display.getInstance().openOrCreate("MyDB.db");

原答案如下:

如果您使用电缆连接您的 Android 设备并查看 DDMS,您应该能够看到错误的完整堆栈跟踪,这将指向失败的特定代码行。

请注意,这也适用于 crash protection,无需 DDMS 或这种情况下的电缆。

【讨论】:

  • 谢谢谢。不幸的是,我无法让 DDMS 与 Netbeans 一起为我工作。我确定这只是我缺乏理解
  • 您可以使用下面的编辑链接编辑您的原始问题,然后将代码放入其中。有按钮。我查看了您的文档并更改了答案以包含问题的解决方案。
【解决方案2】:

我设法按照这个 YouTube 教程使用“adb”命令找到了问题的原因:https://www.youtube.com/watch?v=3wMlCucwGvE

当我按照这些说明操作时,我可以看到以下输出

10-27 08:14:12.580  3967  3986 E SQLiteDatabase: Failed to open database '/databases/MyDB.db'.

10-27 08:14:12.580  3967  3986 E SQLiteDatabase: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 1294): Could not open database

10-27 08:14:12.580  3967  3986 E SQLiteDatabase: #################################################################

10-27 08:14:12.580  3967  3986 E SQLiteDatabase: Error Code : 1294 (SQLITE_CANTOPEN_ENOENT)

10-27 08:14:12.580  3967  3986 E SQLiteDatabase: Caused By : Specified directory or database file does not exist.

10-27 08:14:12.580  3967  3986 E SQLiteDatabase:    (unknown error (code 1294): Could not open database)

10-27 08:14:12.580  3967  3986 E SQLiteDatabase:        #################################################################

所以这个输出 - 连同我原来的错误消息告诉我,我正在尝试在打开数据库之前关闭它。

所以这在我的脑海中提出了两个问题:

1] 怎么在模拟器中完美运行?

2] 在尝试关闭数据库之前是否需要检查数据库是否打开?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-01
    • 2021-11-12
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    相关资源
    最近更新 更多