2017-05-18 4 views
0

Java 8およびXerial SQLITE JDBC Driverを使用しています。Java JDBCを使用してSQLITE .dbファイルへの接続を1つだけ許可します。

私は複数のユーザーを持つアプリケーションを持っていますが、各ユーザーにはそれぞれ独自のデータベース(dbFile.db)がありますが、接続されていないユーザーは他のユーザーのデータベースにも接続できます。

問題は、毎回dbFile.dbに1人のユーザーしか接続できないようにして、接続を切断しないと(データベース接続が近い)、他のユーザーが開くことができないようにすることですそのデータベースファイルとの接続。コードは単純です

は、私は、データベースへの他の接続を防止するために、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); 
    } 
+0

SQLiteは実際のRDBMSではありません。それは単なるファイルです。あなたは、あなた自身でその種の要求を管理しなければならないでしょう。 – Makoto

+0

私はプロパティDBを作成します。私は、プロパティという名前の列があります。列にはconnectionEstablishedを追加します。次に、stateという名前の列を作成します。その値をfalseに設定します。私は誰かが他のDBに接続する前に、このプロパティの値をチェックします。いくつかの接続がもう一方のdbに接続すると、値はtrueに設定されます。接続が切断されると、私はそれをfalseに戻します。 – Sedrick

+0

@Makoto MySqlはそのような仕組みを提供していますか?私は変更することができます。 – GOXR3PLUS

答えて

-1

使用PRAGMA locking_mode = EXCLUSIVEを使用して接続を開封しております。

+0

Javaコードを☺pleaseしてもいいですか?ユーザーがタスクバーからアプリケーションを終了するとどうなりますか? 「PRAGMA」は永遠に同じでしょうか? – GOXR3PLUS

+1

プラグマはSQLコマンドです。ただ実行してください。 SQLiteはOSのロック機能を使用するため、Windowsは自動的にロックを解除します。 –

+0

あなたの答えが下落したのはなぜですか?たぶんあなたはリンクだけを提供しているからかもしれません。私はそれを受け入れることができるコードのいくつかの行を追加する場合:) – GOXR3PLUS

関連する問題