データベースへの接続を必要とするbukkitプラグイン(minecraft)があります。
データベース接続は常に開いたままにする必要がありますか、それとも必要に応じて開いたり閉じたりする必要がありますか?
データベース接続は、必要なときにのみ開いて、必要なすべてのジョブを実行した後に閉じる必要があります。コードサンプル:
Java 7より前:
Connection con = null;
try {
con = ... //retrieve the database connection
//do your work...
} catch (SQLException e) {
//handle the exception
} finally {
try {
if (con != null) {
con.close();
}
} catch (SQLException shouldNotHandleMe) {
//...
}
}
Java 7:
try (Connection con = ...) {
} catch (SQLException e) {
}
//no need to call Connection#close since now Connection interface extends Autocloseable
ただし、データベース接続を手動で開くのは非常にコストがかかるため、 データベース接続プール を使用することを強くお勧めします。これにより、物理データベース接続が処理され、closeすると(つまり、Connection#close
)、物理データベース接続はSLEEPモードであり、まだ開いています。
関連Q/A:
データベース接続プールを処理するいくつかのツール:
あなたのニーズは何に依存します。
接続の作成には時間がかかるため、データベースに頻繁にアクセスする必要がある場合は、接続を開いたままにしておくことをお勧めします。また、プールを作成して、多くのユーザーがデータベースに同時にアクセスできるようにすることをお勧めします(必要な場合)。
この接続を数回だけ使用する必要がある場合は、開いたままにしておくことはできませんが、データベースにアクセスするときに遅延が発生します。だから私はあなたがしばらく接続を開いたままにするタイマー(接続タイムアウト)を作ることをお勧めします。
実際、アプリケーションをどのように記述するかがすべての問題です。それは芸術ですが、悲しいことに、誰もがMicrosoftのチュートリアルのような優れた実践のためのチュートリアルを採用しています。
コーディング対象がわかっている場合は、アプリケーションの存続期間中、接続を開いたままにします。それは簡単です、あなたが朝あなたが仕事に行かなければならないからではなく、毎日私たちはあなたのためだけに特別なルートを作らなければならないのではありません!あなたはその単一のルートを取るか、誰もがするように2つまたは4つです!トラフィックを判断し、必要に応じて2つ、4つ、または6つのルートを作成します。これらの4または6ルートのトラフィックがある場合、待機します!
ハッピーコーディング。
クエリを実行するたびに接続を閉じる必要があります。クエリが相互にぶら下がっているため、複数のクエリを同時に実行する必要がある場合があります。たとえば、「最初の挿入タスクを従業員に割り当てる」などです。このとき、同じトランザクションでクエリを実行してコミットし、エラーが発生した場合はロールバックします。デフォルトでは、JDBCで自動コミットが無効になっています。 例
接続プーリングを使用します。Webアプリケーションを開発している場合は、App Serverの接続プーリングを使用します。アプリサーバーは各アプリケーションに同じプーリングを使用するため、1つのポイントから接続数を制御できます。ApacheTomcatの接続プーリングを強くお勧めします。 例
追加情報として:接続、ステートメント、およびResultSet。
1.接続を閉じる場合、閉じるステートメントまたは結果セットは必要ありません。これらは両方とも自動的に閉じられます。
2.ステートメントを閉じると、ResultSetも閉じます
3.このようにtry-with-resourcesを使用する場合:
try (Connection con = ...) {
} catch (SQLException e) {
}
これは、接続を自動的に閉じます。try-with-resourcesは自動クローズ可能なオブジェクトを必要とし、Connectionは自動クローズできるためです。try-with-resourcesの詳細を見ることができます here
接続は、必要な場合にのみ開く必要があります。実際に必要になる前に開いている場合は、接続プールからアクティブな接続を1つ減らします。そのため、最終的にはアプリケーションのユーザーに影響します。
そのため、必要な場合にのみ接続を開き、プロセスの完了後に接続を閉じることをお勧めします。
アプリケーションで例外が発生した場合でも、接続が確実に閉じられるように、finallyブロック内に接続クローズロジックを配置してください。
finally
{
connection.close()
}