JavaでMySQLのデータベースから取得

2015.12.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

テーブルからデータベースを取得し、その内容を標準出力する流れです。
ドライバ設定などは前々回前回をご覧ください。

取得に使うテーブル

前回から値を変更してますが作りは同じです ^_^

20151217_table_music_shelter

コード

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));
}