この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
テーブルからデータベースを取得し、その内容を標準出力する流れです。 ドライバ設定などは前々回、前回をご覧ください。
取得に使うテーブル
前回から値を変更してますが作りは同じです ^_^
コード
package com.developersio;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class FetchValueClass {
static final String URL = "jdbc:mysql://localhost/cm";
static final String USERNAME = "user";
static final String PASSWORD = "pass";
public static void main(String[] args) {
String sql = "SELECT * FROM music;";
try ( Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
PreparedStatement statement = connection.prepareStatement(sql); ) {
ResultSet result = statement.executeQuery();
result.next();
System.out.println(result.getString(1));
System.out.println(result.getString(2));
System.out.println(result.getString(3));
System.out.println(result.getString("id"));
System.out.println(result.getString("name"));
System.out.println(result.getString("title"));
System.out.println("");
result.next();
System.out.println(result.getString(1));
System.out.println(result.getString(2));
System.out.println(result.getString(3));
System.out.println(result.getString("id"));
System.out.println(result.getString("name"));
System.out.println(result.getString("title"));
} catch (SQLException e) {
e.printStackTrace();
}
}
}
出力結果
1
Kerri Chandler
Atmosphere
1
Kerri Chandler
Atmosphere
2
Blaze
Elevation
2
Blaze
Elevation
解説
SQL文の設定。 テーブルを丸ごと取得します。
String sql = "SELECT * FROM music;";
PreparedStatement にSQL文をセットしているので、そのまま executeQuery() を実行します。 返り値は ResultSet 、中身は取得結果です。
ResultSet result = statement.executeQuery();
next() で取得した内容の先頭の行にフォーカスします。
result.next();
先頭の行にフォーカスをしているので、getString(取得したい列番号) で先頭行の値を取得しています。 getString("カラム名") はカラム(列)を指定して取得しています。 つまり、25〜27行目と28〜30行目は同じカラムを指定している事になるので、出力結果の通り、同じ内容が繰り返し出力されます。
System.out.println(result.getString(1));
System.out.println(result.getString(2));
System.out.println(result.getString(3));
System.out.println(result.getString("id"));
System.out.println(result.getString("name"));
System.out.println(result.getString("title"));
next() で次の行にフォーカスして、その内容を取得しています。 25〜30行目と同じく繰り返し出力されます。
result.next();
System.out.println(result.getString(1));
System.out.println(result.getString(2));
System.out.println(result.getString(3));
System.out.println(result.getString("id"));
System.out.println(result.getString("name"));
System.out.println(result.getString("title"));
まとめ
前回に引き続き、SQLインジェクション対策として PreparedStatement を使用しました。
分かりやすくなる為に冗長的なコードになっているので、実際にコーディングする際は24〜40行目を下記の様にすると同じ様な結果になります。
while (result.next()) {
System.out.println(result.getString(1));
System.out.println(result.getString(2));
System.out.println(result.getString(3));
}