SQLを実行する
一言まとめ
SQLから取得したデータの格納についてメモです。
【説明】
WEB画面の裏側には大体なにかデータベースが存在してプログラムで制御しています。
例えば、入力フォームに郵便番号を入れるだけで続きの住所がドバっと入力されたりする仕組みは以下のような流れです。
- 値が画面で入力される
- プログラミングがデータベースでSQLを実行する
- データベースから住所の情報が返ってくる
- プログラムが受けとってWEB画面に表示する
Step1 : 主要インタフェース
SQLのパッケージをインポート
パッケージ宣言のあとに、SQL関連のインポートを記述します。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
DBに接続するための値をフィールドで定数化
後々でDB接続に使う値を定数化します。
// ドライバーのクラス名
private static final String POSTGRES_DRIVER = "org.postgresql.Driver";
// JDMC接続先情報
private static final String JDBC_CONNECTION = "jdbc:postgresql://localhost:5432/データベース名";
// ユーザー名
private static final String USER = "ユーザー名";
// パスワード
private static final String PASS = "パスワード";
接続先情報、問い合わせ結果、実行結果のデータの初期値を 「null」に
- connection: 接続先の情報
// 接続先の情報を null
Connection connection = null;
// 問い合わせ取得結果を null
Statement statement = null;
// 実行結果のデータを null
ResultSet resultSet = null;
Class.forName()
JDBCドライバをロードします。データベースに接続する準備の記述。
Class.forName()メソッドにJDBCドライバ名を与えます。
// データベースに接続する準備。
// Class.forName()メソッドにJDBCドライバ名を与えJDBCドライバをロード
Class.forName(POSTGRES_DRIVER);
// 接続先の情報。引数:「JDMC接続先情報」,「ユーザー名」,「パスワード」
connection = DriverManager.getConnection(JDBC_CONNECTION, USER, PASS);
Statementインタフェース【SQLの実行】
StatementインタフェースはSQLの実行に関するベースにになります。
- 問い合わせを実行
- 問い合わせの結果の取得
といった操作をしたい時にを使用します。
// ステートメントの作成
statement = connection.createStatement();
// 「テーブル内のデータを出力する」SQL文の変数化
String SQL = "SELECT * FROM テーブル名";
// 引数で指定したSQLを実行して、実行結果を格納
resultSet = statement.executeQuery(SQL);
createStatement"メソッド【ステートメントの作成】
ステートメントは「java.sql.Statement」インターフェースのオブジェクトですが、作成するには Connectionクラスの 「createStatement()メソッド」で取得します。
executeQuery()メソッド 【引数で指定したSQLをDBで実行】
executeQuery()メソッドは、引数で指定されたSQLをデータベースで実行するメソッドです。
問題なく処理が完了すると、SQLの実行結果を格納したResultSet型のオブジェクトを返します。
ResultSetインタフェース 【SQLの実行結果とデータの取得・格納】
上記のようににResultSetは以下の機能ももっています。
- SQLの実行結果を格納する
- DB情報を取得する
next()メソッド 【resultSetの初期位置を移動】
resultSetは 「 必ずnext()メソッド で最初の行に移動 」してあげましょう。
whileで回そうとした時には、結果の2行目にカーソルが当たってしまい、
resultSetは初期状態では、最初の行の1つ前に位置しています。そのままSQLを叩くとwhileで回そうとした時には、結果の2行目にカーソルが当たってしまい、
結果の1行目はリストに追加されないため、「コマンドでSQL叩くより1行少なくなる」といった事が起きます。
next()メソッド は、該当する行が存在する場合にのみ true を返します。
下記のようにwhile文と組み合わせて使うことにより、
実行結果を格納した情報を先頭から最後尾まで順に追っていくことができます。
// next()メソッド (次の行に移動する)で最初の行に移動する
// while文で実行結果の情報を先頭から最後尾まで順に追う
while (resultSet.next()) {
String column1 = resultSet.getString("列名");
String column2 = resultSet.getString("列名");
int column3 = resultSet.getInt("列名");
}
getXXX()メソッド
該当する行の任意の列の取得には、「getXXX()」メソッドを使用します。
データ型によって以下のメソッドで使い分けます。
- 文字列: getString()メソッド
- 整数: getInt()メソッド, getLong()メソッド
- 日付: getDate()メソッド