Java MySQLにJDBC接続してselectするサンプル

Javaで、MySQLにJDBC接続してselectするサンプルです。
EclipseからXAMPPのMySQLに接続します。

実行環境
・Windows10
・Eclipse4.6
・XAMPP 7.1.10

目次

XAMPPの環境

XAMPPのMySQLを使用します。
XAMPPのインストール方法はこちらを御覧ください。
ローカルにPHPが動く環境を作る手順(XAMPP)

データベースとテーブルの作成

1.XAMMPのMySQLにデータベース、テーブルを作成しておく必要があります。
作成方法はこちらを御覧ください。
XAMPPのphpMyAdminでDB作成からデータ取得までのサンプル

2.以下のテーブルのデータを取得します。テーブル名は「fish」です。

 

1.jarファイルの取得

1.MySQLのJDBC ドライバを取得します。
以下のMySQLのサイトにアクセスします。
http://dev.mysql.com/downloads/connector/j/

 

2.ZIP Archiveの「Download」ボタンを押します。

 

3.「No thanks,just start my download.」をクリックします。

 

4.ダウンロードしたzipを展開し以下のファイルを任意の場所に配置します。
mysql-connector-java-5.1.46-bin.jar

 

2.jarファイルをクラスパス(ビルドパス)に追加

mysql-connector-java-5.1.46-bin.jarをクラスパスに追加します。
クラスパスに追加する手順は、以下のページをご覧ください。
Eclipse 外部jarファイルをクラスパス(ビルドパス)に設定する方法

 

3.ソースコードの作成

以下のコードを作成して実行します。
実行時は、XAMPPのMySQLを起動しておく必要があります。

21,22行目は、データベースへ接続しています。
23行目は、ステートメントオブジェクトを生成しています。
24行目は、SQLを実行して結果セットを取得しています。
21-24行目は、try-with-resources構文です。リソースを自動でクローズします。
26-31行目は、取得した行数分ループしています。

package test1;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 *  mysql JDBC接続とデータの取得のサンプル
 */
class Sample {

	void runSample(){

	    String url = "jdbc:mysql://localhost:3306/testphp";
	    String user = "root";
	    String pass = "";
	    String SQL = "select * from fish;";
	    
		try(Connection conn = 
		        DriverManager.getConnection(url, user, pass);
		    Statement stmt = conn.createStatement();
		    ResultSet rs = stmt.executeQuery(SQL)) {

			while (rs.next()) {
				System.out.println(
				        rs.getString("id") + " " +
		                rs.getString("name") + " " +
				        rs.getString("romaji"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
		    System.out.println("処理が完了しました");
		}
	}
}
public class Test1 {
	public static void main(String[] args) {
		Sample s = new Sample();
		s.runSample();
 	}
}

結果は、DBにある全行と「処理が完了しました」が出力されます。

以下はJava8 API仕様のDriverManagerクラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/sql/DriverManager.html

以下はJava8 API仕様のConnectionインターフェースのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/sql/Connection.html

以下はJava8 API仕様のStatementインターフェースのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/sql/Statement.html

以下はJava8 API仕様のResultSetインターフェースのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/sql/ResultSet.html

 

4.プレースホルダを使用する

上記コードを修正してプレースホルダを使用するサンプルです。

プレースホルダ

  • SQL文中の(?)がプレースホルダです。動的に値をセットできます。
  • 入力される不正な文字を抑止できるのでSQLインジェクション対策になります。
  • 固定文字列のSQLの部分がプリコンパイルされるので実行速度が上がります。

サンプル

19行目は、プレースホルダを使用したSQLです。?の箇所がプレースホルダです。
25,26行目は、プレースホルダに値をセットしています。1つめの引数はプレースホルダの位置です。2つめの引数は値です。
21-23行目は、try-with-resources構文です。リソースを自動でクローズします。

package test1;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 *  mysql JDBC接続とデータの取得のサンプル
 */
class Sample {

    void runSample(){

        String url = "jdbc:mysql://localhost:3306/testphp";
        String user = "root";
        String pass = "";
        String SQL = "select * from fish where id =? and romaji=?;";
        
        try(Connection conn = 
                DriverManager.getConnection(url, user, pass);
            PreparedStatement ps = conn.prepareStatement(SQL)){
            
            ps.setString(1,"3");
            ps.setString(2,"maguro");
            
            try(ResultSet rs = ps.executeQuery()){
                while (rs.next()) {
                    System.out.println(
                            rs.getString("id") + " " +
                            rs.getString("name") + " " +
                            rs.getString("romaji"));
                }           
            };

        } catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            System.out.println("処理が完了しました");
        }
    }
}
public class Test1 {
    public static void main(String[] args) {
        Sample s = new Sample();
        s.runSample();
    }
}

結果は、「3 まぐろ maguro」「処理が完了しました」が出力されます。

 

PreparedStatement

以下はJava8 API仕様のPreparedStatementインターフェースのリンクです。https://docs.oracle.com/javase/jp/8/docs/api/java/sql/PreparedStatement.html

関連の記事

ローカルにPHPが動く環境を作る手順(XAMPP)
XAMPPのphpMyAdminでDB作成からデータ取得までのサンプル
Java MySQLにJDBC接続してinsert/update/deleteするサンプル

 はまったらエンジニア特化型Q&Aサイト
【teratail(テラテイル)】で質問しましょう!


△上に戻る