我在Android中使用 SQLite 作为Gluon移动应用。当我第一次访问数据库时它没有问题,但另一次我有一个例外:
“Android.database.sqllite.SQLiteDatabaseLocked异常:数据库是 锁定(代码5)
访问数据库的代码是:
if (Platform.isAndroid()) {
Class.forName("org.sqldroid.SQLDroidDriver");
try {
dir = Services.get(StorageService.class)
.map(s -> s.getPrivateStorage().get())
.orElseThrow(() -> new IOException("Error: PrivateStorage not available"));
File db = new File(dir, DB_NAME);
DBUtils.copyDatabase("/databases/", dir.getAbsolutePath(),
DB_NAME);
dbUrl = dbUrl + db.getAbsolutePath();
System.out.println(dbUrl);
c = DriverManager.getConnection(dbUrl);
} catch (IOException ex) {
Alert alert = new Alert(AlertType.CONFIRMATION, ex.getClass().getName());
alert.setContentText(ex.getMessage());
alert.showAndWait();
}
c.setAutoCommit(false);
System.out.println("Opened database successfully");
stmt = c.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM COMPANYn;");
while (rs.next()) {
ObservableList<String> items = FXCollections.observableArrayList();
String name1 = rs.getString("name");
// System.out.println(name1);
items.addAll(name1);
ET.getItems().addAll(items);
ET.getSelectionModel().select(0);
}
rs.close();
stmt.close();
c.close();
有人可以帮助我。谢谢你的帮助。
答案 0 :(得分:0)
我在同样的情况下收到同样的错误(连接到sqlite,使用Gluon并在Android上运行)。在桌面上工作得很好,但得到了与Android标题相同的错误。
有趣的是,我发现我的第二个SELECT语句而不是我的第一个语句是抛出错误的语句。在关闭语句,结果集和第一个语句的连接之后,第二个语句在一个单独的方法中。
我最终发现 不关闭我的sqlite连接似乎为我解决了这个问题。这看起来很奇怪,因为我习惯在事务,方法等结束时关闭它们,但似乎这在sqlite中并不是异常。
请点击此处查看有关该主题的相关信息:
Android: Cannot perform this operation because the connection pool has been closed