【Java】ResultSetインターフェースでSQLの実行結果を格納してみよう!
  • facebookページ
  • twitterページ
  • 2021.02.19

    【Java】ResultSetインターフェースでSQLの実行結果を格納してみよう!

    Javaでデータベース関連の処理を実装する際、SQLの実行結果を格納するために用いられるのが「ResultSet」インターフェースです。

    本記事では、JavaのResultSetインターフェースについて、基本的な使い方をサンプルコードを掲載しながらご紹介していきます。

    JavaのResultSetインターフェースとは


    ResultSetは「java.sql」のパッケージに含まれるインターフェースで、同パッケージに含まれる様々なSQL関連メソッドの実行結果を格納するために利用されます。

    ResultSetを返却するメソッド

    「java.sql」パッケージの中で、利用されることの多いResultSetを返却するメソッドは「executeQuery」と「getResultSet」です。

    ResultSetを返却するメソッド
    • Statement.executeQuery(String sql)
    • Statement.getResultSet()

    executeQueryメソッド

    executeQueryメソッドでは、単一のResultSetオブジェクトを返却するSQL文が実行されます。

    executeQueryの実行結果を、ResultSetで指定したオブジェクトに格納します。

    getResultSetメソッド

    getResultSetメソッドでは、オブジェクトとして現在の結果を返却します。

    executeQueryとは違い、引数にSQL文を設定するわけではありません。

    発行済のSQL文の結果を取得する際、利用されます。

    ポテパンダの一言メモ

    詳しい使い方については後ほどサンプルコードを掲載しています。

    ResultSetで利用可能なメソッド

    ResultSetに格納したデータは、各種メソッドを利用することで操作することが可能です。

    ResultSetではカーソルという考え方で、取得したデータを行単位で動かしながら処理を実行していきます。

    カーソル移動

    カーソル移動
    • first: 先頭行にカーソルを移動
    • last: 最終行にカーソルを移動
    • next: 次の行にカーソルを移動
    • previous: 前の行にカーソルを移動
    • absolute(行番号): 指定した行にカーソルを移動

    現在行のデータ取得

    現在行のデータ取得
    • getInt(カラム名): 指定したカラムのデータをint型で取得
    • getString(カラム名): 指定したカラムのデータをString型で取得
    • getBoolean(カラム名): 指定したカラムのデータをBoolean型で取得

    カーソル状態確認

    カーソル状態確認
    • isFirst: カーソルが先頭行にあるかどうかの確認
    • isLast: カーソルが最終行にあるかどうかの確認
    • isClosed: ResultSetオブジェクトがクローズされているかどうかの確認

    ResultSetにexecuteQueryメソッドの問い合わせ結果を格納するサンプル


    executeQueryメソッドを利用して、ResultSetにデータを格納してみたいと思います。

    今回はサンプルのデータベースとしてMySQLを利用しており、接続方法はJDBCを使用しています。

    サンプル用テーブル

    サンプル用のデータベース「test_db」に「fruits」テーブルを下記のデータで作成しています。

    サンプルコード

    サンプル用の「fruits」テーブルから全データを取得し、コンソールに出力するサンプルコードが下記となります。

    実行結果

    サンプルコード解説

    簡単にResultSetインターフェースに関連する部分を説明していきたいと思います。

    この部分がSQL文を発行し、実際に実行している処理となります。

    SQLの実行結果はResultSetのオブジェクトとして定義した「rs」変数に格納されます。

    取得したResultSetのオブジェクトを操作しているのがこの記述です。

    whileで取得データをループさせ、ResultSetが持つ「next()」メソッドにより1行ずつ処理を実施しています。

    各行のデータは「getInt()」「getString()」メソッドでカラム名を指定し取得しています。

    最後に使用しなくなったResultSetオブジェクトのカーソル「close()」メソッドでクローズしておくことで、JDBCのリソースを解放しています。

    getResultSetメソッドで格納したデータを操作するサンプル


    では上記サンプルをもう少し色々なメソッドを利用して操作してみましょう。

    サンプルコード

    実行結果

    サンプルコードの違いを確認

    executeQueryメソッドを利用した場合との違いはお気づき頂けたでしょうか?

    executeQueryでは引数としてSQL文を渡すのに対し、getResultSetでは発行済のSQL文をStatementオブジェクトから取得する違いがあります。

    ResultSetオブジェクトに格納したあとの操作方法は同じです。

    今回のサンプルではループ処理を実行する前にカーソル操作をいくつか実行しています。

    注目してもらいたいのはResultSetオブジェクトを作成したタイミングでは、カーソルは最初の行ではなく最初の行の1つ前に設定されていることです。

    そのため、「first()」メソッドで最初の行にカーソルを移動しループ処理を実行した結果、「next()」メソッドがまず実行されることになるため、2行目以降のデータから出力される結果となることを意識しておきましょう。

    さいごに: ResultSetインターフェースを使用してJavaでデータを操作してみよう


    本記事では、ResultSetインターフェースを使用したJavaのデータ操作についてご紹介してきました。

    データベースから取得したデータをJava側のプログラムで操作する機会は少なくありません。

    頻繁に利用するResultSetのメソッドは限られていますので、少しずつ実際に触ってみながら使い方を覚えていくようにしましょう。



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE