2011-11-09 2 views
0

私のアプリケーションでデータベースを使用していますが、アプリケーションに2つのスレッドがデータベースにアクセスしているときなど、同期してデータベースにアクセスする必要があります。方法上記同期データベースアクセス

private synchronized Database accessDB() 
{ 
    Database dbObj = null; 
    try { 
_uri = URI.create(dbLocation + DB_NAME); 
try { 
dbObj = DatabaseFactory.openOrCreate(_uri, new DatabaseSecurityOptions(false)); 
System.out.println("Database Created"+_dbTopNews); 
    } catch (ControlledAccessException e) { 
      // TODO Auto-generated catch block 
e.printStackTrace(); 
} catch (DatabaseIOException e) { 
// TODO Auto-generated catch block 
    e.printStackTrace(); 
    } catch (DatabasePathException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

} catch (IllegalArgumentException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
    } catch (MalformedURIException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return dbObj; 
} 

TEデバッグ戻り、最初のスレッドにオブジェクトと、が、第2のスレッドがアクセスされたときには、NULLを返して

AY一般

+0

次回は:タイトルにcapslockの必要はありません。 –

+0

トマス・ユンブブラット、おかげさまで、私の心に留めておくべきことの一つは、大文字のロックではありません.D – ayachama

答えて

3

、によってこれを行うには2つの方法が、そこにされていますあなたは孤立しています。

1:トランザクション。これにより、データベース内の操作が分離されます。たとえば、一度に1つのスレッド(セッション)のみがテーブルや行を変更できることを保証します。

2:同期。これは、スレッドの並行性がマルチスレッド環境で処理されるJavaのメソッドです。同期(および「ロック」)を使用することで、コードの一部を分離して、一度に1つのスレッドのみが実行できるようにすることができます。

あなたが提供した情報により、さらに具体的ではありません。

+0

答えのお手伝いをしてくれてありがとうございました。私の説明の性質について謝っています。これは初めてのことで、私の見解から適切に入れられないので、私はデータベースオブジェクトにアクセスするための同期を実装しようとしています。 – ayachama

+0

私は2つのスレッド、スレッド1とスレッド2を持っています。 Thread1はxmlを解析し、新しいDATABASE1を作成し、作成してtable1に挿入し、thread2はDATABASE1を作成してtable2に挿入します。 – ayachama

+0

スレッドが異なるテーブルに挿入されている場合は、おそらく同期する必要はありません – pap

関連する問題