あなたはおそらくApacheのCommonsのライブラリにDbUtilsパッケージのような何かをしたい:[http://commons.apache.org/dbutils/index.html][1]
QueryRunnerクラスを使用すると、手動でのPreparedStatementを作成することなく、SQL文を実行し、あるいはそのためのオープンな接続を持っていることができます問題。例のページから:
QueryRunner run = new QueryRunner(dataSource);
try
{
// Create an object array to hold the values to insert
Object[] insertParams = {"John Doe", new Double(1.82)};
// Execute the SQL update statement and return the number of
// inserts that were made
int inserts = run.update("INSERT INTO Person (name,height) VALUES (?,?)",
insertParams);
// Now it's time to rise to the occation...
Object[] updateParams = {new Double(2.05), "John Doe"};
int updates = run.update("UPDATE Person SET height=? WHERE name=?",
updateParams);
}
catch(SQLException sqle) {
// Handle it
}
だから、基本的に透過的に準備された文の作成を処理し、あなたが本当に知っておく必要がある唯一のものは、DataSourceです。これはupdate/insert以外のステートメント、つまりplain-vanilla selectクエリでも同様に機能し、ResultSetHandlerを作成すると、完全に準備されたBeanやキー付きのMapにResultSetを変換する機能が得られます列名であり、値は実際の行の値です。 ORMソリューション全体を実装できない場合に非常に便利です。
executeNonQueryメソッドには1つの問題があります。接続を取得することです。このメソッドを実行するたびに作成すると、パフォーマンスの問題が何度も繰り返し実行されます(接続の作成と終了は高価です)。これが、最初の呼び出しでのみ接続を作成するオブジェクトにカプセル化されている場合は、問題が発生します。多分時間に基づいていますか?キャッシュに静的フィールドを使用する場合は、これが収集されないように注意してください。ただし、接続をキャッシュする際には同時呼び出しに注意してください。ロック機構(syncrhonizedなど)を使用しないと、多くの接続が作成される可能性があります。 –