早期終了を避けるために Java で ResultSet を安全に処理するにはどうすればよいですか?

DDD
リリース: 2024-11-27 12:19:11
オリジナル
732 人が閲覧しました

How Can I Safely Handle ResultSets in Java to Avoid Premature Closure?

Java で ResultSet を返す

データベース テーブルへのアクセスには、多くの場合、複数行のデータを含む結果セットの取得が含まれます。従来は、これらの結果セットが返され、その後反復処理されて個々の行が抽出されていました。ただし、このアプローチには潜在的な問題があります。

結果セットのクロージャビリティの問題

結果セットを管理する際の課題の 1 つは、結果セットの固有のクロージャビリティです。結果セットが閉じられると、それに関連するステートメントと接続も閉じられ、それ以降の操作ではアクセスできなくなります。これにより、いわゆる「ResultSet を閉じた後は操作が許可されません」エラーが発生する可能性があります。

解決策: コレクションへのマッピング

これらの問題を回避するには、次のことをお勧めします。パブリック メソッドで生の結果セットを返さないようにします。代わりに、結果セットを JavaBeans のコレクションにマッピングし、代わりにそのコレクションを返すことを検討してください。これにより、コレクションが不要になるまでステートメントと接続を開いたままにし、早期の終了を防ぎます。

これを実装する方法の例を次に示します。

public List<Biler> list() throws SQLException {
    // Initialize connection, statement, and result set
    Connection connection = ...
    PreparedStatement statement = ...
    ResultSet resultSet = ...

    List<Biler> bilers = new ArrayList<>();

    // Iterate over the result set and map rows to JavaBeans
    while (resultSet.next()) {
        Biler biler = new Biler();
        // Set properties of the JavaBean from the result set
        ...
        bilers.add(biler);
    }

    return bilers;
}
ログイン後にコピー
上記のコードでは、 list() メソッドは、それぞれがデータベース テーブル内の行を表す JavaBean オブジェクトのリストを返します。このアプローチにより、返されたコレクションが必要なくなるまで接続とステートメントが開いたままになり、早期に終了する可能性が排除されます。

Try-with-Resources の使用

Java 7 では、閉じる必要があるリソースの管理を簡素化する try-with-resources ステートメントが導入されました。以下のコード スニペットでは、接続、ステートメント、結果セットは try ブロックの最後に自動的に閉じられます。

public List<Biler> list() throws SQLException {
    try (
        Connection connection = ...
        PreparedStatement statement = ...
        ResultSet resultSet = ...
    ) {
        // Iterate over the result set and map rows to JavaBeans
        ...
    }

    return bilers;
}
ログイン後にコピー
これらの手法を採用することで、Java で結果セットを安全かつ効率的に処理できます。コードを使用して、データベース リソースが正しく管理され、潜在的な例外が発生しないようにします。

以上が早期終了を避けるために Java で ResultSet を安全に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート