2

現在、次の方法でデータベースに接続しました。

MyClass.java

try {
    DataSource datasource = JNDILoader.getDataSourceObject(pathToSource);
    Class.forName("net.sourceforge.jtds.jdbc.Driver");
    connection = datasource.getConnection();
    stmt = connection.prepareStatement("{call storageProcedureXXX(?,?)}");
    stmt.setString(1, "X");
    stmt.setString(2, "Y");            
    result = stmt.executeQuery();
}catch (SQLException){
    //TODO
}catch(Exception){
    //TODO
} 

これは、データを要求する 1 つのクラスで機能しますが、シングルトン クラスを作成してそこから接続を取得した方がよいでしょうか? (パフォーマンス?、保守性?、シンプルさ?)。リクエストごとにシングルトンと StorageProcedures のどちらのオプションが適していますか?

注: 最後に、アプリケーション (Restful Web サービス) はさまざまなデータベースに接続して、さまざまな特殊なクラスのデータをロードする必要があります。クラスはプレーン テキストからデータをロードする必要があります。

4

2 に答える 2

2

まず、シングルトンとストアドプロシージャの2つの異なるものを混合しています。シングルトンはデザインパターンであり、ストアドプロシージャはデータベースで実行されるプロシージャであり、通常は一部のビジネスロジックをカプセル化します。

あなたが書いたものは、データベースに接続するための実際に好ましい方法ではありません。リクエストが多く、リクエストごとに1つの接続を作成する場合、データベースへの接続が多すぎるという問題が発生します。接続プールを使用する必要があります。Javaで最も有名なのはDBCPです。もう1つはc3p0です。

異なるデータベースに接続するには、Hibernateのようなものを使用する必要があります。

于 2013-01-25T21:46:47.507 に答える
0

ストアドプロシージャはデータベースで実行されます。接続を介してデータをデータに渡したり、データからデータを取得したりします。

同時呼び出しを行うかどうかは、スレッドセーフかどうかを確認する必要があります(私はそうは思いません)。

通常、ストアドプロシージャ=1つのトランザクションがデータベースで発生します。

そもそもなぜストアドプロシージャを使用しているのですか?

于 2013-01-25T21:27:47.323 に答える