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

JavaでMySQLに接続してselectするサンプルです。
(確認環境:Java8,XAMPP 7.2.8,Eclipse 4.8)

目次

SQLのサンプル JDBC接続してselectを実行する
説明 接続情報
  プレースホルダ
  接続とtry-with-resources構文
  パラメータ(値)のセット
  SQLの実行とデータの取得
  例外をキャッチする
ドライバ JDBCドライバを取得する
環境 接続先のデータベースとテーブル

JDBC接続してselectを実行する

MySQLにJDBC接続してselectを実行するサンプルです。

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

public class Test1 {    
    public static void main(String[] args) {

        final String URL 
        = "jdbc:mysql://localhost:3309/testdb?";
        final String USER = "root";
        final String PASS = "";
        final String SQL = "select * from employee where id =? and romaji=?;";
        
        try(Connection conn = 
                DriverManager.getConnection(URL, USER, PASS);
            PreparedStatement ps = conn.prepareStatement(SQL)){
            
            ps.setInt(1,2);
            ps.setString(2,"tanaka");
            
            try(ResultSet rs = ps.executeQuery()){
                while (rs.next()) {
                    System.out.println(
                    	rs.getInt("id") + " " +
                    	rs.getString("name") + " " +
                        rs.getString("romaji"));
                }           
            };
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            System.out.println("処理が完了しました");
        }
    }
}

接続情報

        final String URL 
        = "jdbc:mysql://localhost:3309/testphp;
        final String USER = "root";
        final String PASS = "";

11~14行目は、MySQLへ接続する情報です。3309はポート番号です。testdbはデータベース名です。
finalは再代入不可になります。
Java finalのサンプル(定数として使用/継承不可)

= "jdbc:mysql://localhost:3309/testdb?serverTimezone=JST";

※以前は、データベース名(testdb?)の後にserverTimezone=JSTが必要でしたが今は不要になりました。あると接続エラーになります。(2023/1)

プレースホルダ

final String SQL = "select * from employee where id =? and romaji=?;";

15行目は、SQLのselect文です。クエスチョンマーク(?)は、プレースホルダです。パラメータで値を設定します。
入力される不正な文字を抑止できるのでSQLインジェクション対策になります。
固定文字列のSQLの部分がプリコンパイルされるので実行速度が上がります。
place=場所、holder=入れものです。
プレースホルダは、バインド変数とも呼ばれます。

接続とtry-with-resources構文

         try(Connection conn = 
              DriverManager.getConnection(URL, USER, PASS);
            PreparedStatement ps = conn.prepareStatement(SQL)){

17行目のtryの後に続くかっこ()はリソースを自動でクローズします。try-with-resources構文と呼ばれます。Java7で導入されました。
Java リソースを自動でクローズ(try-with-resources文)
18行目は、DriverManagerクラスのgetConnectionメソッドで接続しています。変数の型はConnectionインターフェースです。
19行目は、prepareStatementのインスタンスを生成しています。プリコンパイルされたSQL文を扱うオブジェクトです。引数に上記のSQLを指定しています。
Prepared=準備された、Statement=文です。

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

パラメータ(値)のセット

            ps.setInt(1,2);
            ps.setString(2,"tanaka");

21,22行目は、プレースホルダに値をセットしています。
1つめの引数はプレースホルダの位置です。2つめの引数は値です。
このサンプルのDBでは、1つめの項目のデータ型はintなのでsetIntメソッドにし、2つめの項目のデータ型はvarcharなのでsetStringメソッドにしています。

SQLの実行とデータの取得

           try(ResultSet rs = ps.executeQuery()){
                while (rs.next()) {
                    System.out.println(
                    	rs.getInt("id") + " " +
                    	rs.getString("name") + " " +
                        rs.getString("romaji"));
                }           
            };

24行目は、executeQueryメソッドでSQLを実行し、ResultSetインターフェースのデータ型の変数に取得した値をセットしています。
25行目は、while文で取得した全データ件数分が完了するまでループ処理を実行します。

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

例外をキャッチする

        } catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } 

32行目のcatchは上記コードでSQLExceptionのエラーが発生したときに処理が行われます。
SQLExceptionはクラスでeは変数です。
33行目は、printStackTraceでスタックトーレスを出力します。
Java printStackTraceとは
34行目は、SQLException以外のエラーが発生したときに処理が行われます。

JDBCドライバを取得する

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

 

2.Select Operating Systemで「Platform Independent」を選択するとダウンロードボタンが表示されます。ZIP Archiveの「Download」ボタンを押します。
Connector/Jは、JDBC Driver for MySQLの別名です。

 

3.「No thanks,just start my download.」をクリックするとダウンロードが始まります。

 

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

JDBCドライバをクラスパス(ビルドパス)に追加する

JDBCドライバ(mysql-connector-java-8.0.12.jar)をクラスパスに追加します。
クラスパスに追加する手順は、以下を参照願います。
Eclipse jarファイルをクラスパスに設定する方法

接続先のデータベースとテーブル

XAMPPのMySQLを使用しています。
XAMPPのインストール方法は以下を参照願います。

XAMPP インストールとHello Worldを表示

関連の記事

Java MySQLでデータ更新する(insert/update/delete)
DaoとDtoとDBの関係をJavaコードで確認

△上に戻る