Android.database.sqllite.SQLiteDatabaseLocked异常:数据库被锁定(代码5):,编译时:PRAGMA journal_mode

时间:2017-01-03 19:39:54

标签: android javafx gluon

我在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();

有人可以帮助我。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我在同样的情况下收到同样的错误(连接到sqlite,使用Gluon并在Android上运行)。在桌面上工作得很好,但得到了与Android标题相同的错误。

有趣的是,我发现我的第二个SELECT语句而不是我的第一个语句是抛出错误的语句。在关闭语句,结果集和第一个语句的连接之后,第二个语句在一个单独的方法中。

我最终发现 关闭我的sqlite连接似乎为我解决了这个问题。这看起来很奇怪,因为我习惯在事务,方法等结束时关闭它们,但似乎这在sqlite中并不是异常。

请点击此处查看有关该主题的相关信息:

Android: Cannot perform this operation because the connection pool has been closed