0

基本的に、一度に 1 つの SQL 接続のみを処理したいだけで、最初に閉じるまで他の接続を待ちます。

Class myConnection
{
        private static Connection con=null;
        public void getConnection()
        {
            con= DriverManager.getConnection("jdbc:sqlite:"
                    + properties.getProperty("sqliteDatabase"));
        }
        public void closeConnection()
        {
         con.close();
        }
        public static void main(String s[]){
           myConnection m1=new myConnection();
           m1.getConnection();
          //m1 object using con variable
           myConnection m2=new myConnection(); 
          //m1.still executing query using con object
          m2.getConnection();
          //i should not allow m2 access con object till con object is null
}

私はそれが正しいプログラムではないことを知っています。やりたいことを説明しようとしただけです。つまり、単一の接続が機能する必要があり、接続が閉じるまで別の接続を待ちます。

4

3 に答える 3

1

この目的のためにhttp://commons.apache.org/proper/commons-dbcp/を使用することをお勧めします

BasicDataSource ds = new BasicDataSource();
ds.setUrl(url);
ds.setMaxActive(1);

プールから接続を取得できるスレッドは 1 つだけになり、他のスレッドはブロックされます

于 2013-11-11T12:29:56.400 に答える
0

接続クラスにサインルトン パターンを実装します。

 Class myConnection
{
        private static Connection con=null;
        public synchronized void getConnection()
        {
            con= DriverManager.getConnection("jdbc:sqlite:"
                    + properties.getProperty("sqliteDatabase"));
        }
        public synchronized void closeConnection()
        {
         con.close();
        }
        public static void main(String s[]){
           myConnection m1=new myConnection();
           m1.getConnection();
          //m1 object using con variable
           myConnection m2=new myConnection(); 
          //m1.still executing query using con object
          m2.getConnection();
          //i should not allow m2 access con object till con object is null
}

Synchronized メソッドは一度に 1 回呼び出すことができます。2 つのオブジェクトが同時に Synchronized メソッドを呼び出すことはできません。それらが呼び出した場合、一方が他方を待つ必要があります。

于 2013-11-11T13:02:39.503 に答える