【问题标题】:Allow only one connection to SQLITE .db file using Java JDBC只允许使用 Java JDBC 与 SQLITE .db 文件建立一个连接
【发布时间】:2017-05-18 17:49:50
【问题描述】:

我正在使用 Java 8 和 Xerial SQLITE JDBC Driver

我有一个有多个用户的应用程序,每个用户都有自己的数据库(dbFile.db),但是任何用户在没有连接时也可以连接到其他用户的数据库。

问题是我希望每次只有一个用户能够连接到dbFile.db,如果他/她没有断开连接(关闭数据库连接),那么其他用户应该不能打开与该数据库文件的连接。

代码很简单,我只是使用 JDBC 和 Java 8 打开一个连接。

 try {
        //!I want here to check if another user is connected to the database!
       if(otherUserConnected)
            return;

        // Open connection
        Connection connection = DriverManager.getConnection("jdbc:sqlite:C:/../../users/d/dbFile.db");
        connection.setAutoCommit(false);

    } catch (SQLException ex) {
        Main.logger.log(Level.SEVERE, "", ex);
    }

【问题讨论】:

  • SQLite 不是真正的 RDBMS;它只是一个文件。您将不得不自己管理这种需求。
  • 我会创建一个属性数据库。我会有一个名为属性的列。在列中,我将添加 connectionEstablished。然后我会创建一个名为 state 的列。我会将该值设置为false。在允许某人连接到另一个数据库之前,我会检查此属性值。一旦一些连接到另一个数据库,就会将值设置为 true。当他们断开连接时,我会将其设置回 false。
  • @Makoto MySql 是否提供了这样的机制?我可以改变。
  • @SedrickJefferson 你好 Sedrick。这个问题总是来的。如果应用程序从任务栏终止或出现某些错误怎么办。坏的将被永远锁定。因为锁会保留。我需要想法来解决它。
  • 好点!您必须使用始终在关闭时运行的块。

标签: java sqlite


【解决方案1】:

使用PRAGMA locking_mode = EXCLUSIVE 阻止与数据库的任何其他连接。

【讨论】:

  • 我可以给它Java代码吗☺️?如果用户从任务栏终止应用程序会发生什么? 'PRAGMA' 将永远不变?
  • pragma 是一条 SQL 命令;只需执行它。 SQLite 使用操作系统锁定功能,因此 Windows 会自动解除锁定。
  • 为什么你的答案被否决了?也许是因为您只提供了链接。如果您添加一些代码行,我可以接受:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
  • 2017-02-07
  • 2011-09-23
  • 1970-01-01
  • 2019-11-03
相关资源
最近更新 更多