【发布时间】: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。这个问题总是来的。如果应用程序从任务栏终止或出现某些错误怎么办。坏的将被永远锁定。因为锁会保留。我需要想法来解决它。
-
好点!您必须使用始终在关闭时运行的块。