2020/10/30 Updated by

Java: JDBC

Javaのプログラムでデータベースにアクセスをする


[Up] Japanese English

[前提条件]

[注意] ここではMariaDBを想定して説明しているが、MySQLを利用する場合は jdbc が異なるので注意する。 MySQL の場合はこちらを参照すること。 少し古いが mysql-connector-java-5.1.16-bin.jar も使える。


手元のjava環境にMariaDBデータベースサーバにアクセスする機能を追加する

  1. Java 8 以降がインストールされていることを確認する。もしもJavaがインストールされていなければOpenJDKまたはAzul Zuluをインストールする。Windowsだとどちらでも構わない。macOSの場合は Azul Zule の方がインストールが楽だと思われる。
  2. javaからデータベースにアクセスするには JDBC (Java Database Connectivity)が必要となる。 また、データベース毎に用意されたドライバが必要となる。 ドライバはJavaの標準のクラスライブラリには 含まれていないので、自分で入手して実行時のクラスパスに置く必要がある。
  3. MariaDBの公式サイトから jdbc (Connector/J) をダウンロードする。
  4. Product 'Java 8 connector' の Version '2.7.0-GA' を選択すると mariadb-java-client-2.7.0.jar がダウンロードされる。 https://mariadb.com/kb/en/about-mariadb-connector-j/





  5. 適切な場所に jar ファイルを配置する。
  6. ここでは C:\Users\nitta\Documents\java\lib\mariadb-java-client-2.7.0.jar として配置したものとする。
  7. jarファイルへのパスをCLASSPATH環境変数に含めるように設定する。
  8. 環境変数を設定した後で起動したプログラム(たとえばコマンドプロンプト等)では、CLASSPATH変数に値が設定されている。 CLASSPATH変数に値を設定する場合は、必ず '.' (カレント・ディレクトリ)も先頭に含めておくこと。 複数の値を設定する場合は ';' (セミコロン)でつなぐ。

    システムの詳細設定 → システムのプロパティ → 環境変数 → 「システム環境変数」に対して「新規」または「編集」 → 「CLASSPATH」変数に ';' でつないで(フォルダまたはjarファイルへの)パスを指定する。

        変数名: CLASSPATH
        変数値: .;C:\Users\nitta\Documents\java\lib\mariadb-java-client-2.7.0.jar;C:\xampp\tomcat\lib\servlet-api.jar
    










javaプログラムでMariaDBデータベースサーバにデータを追加する

  1. SQLを使うJavaプログラムをコンパイルして実行してみる。
  2. ローカルホストのMariaDBと通信して、nittaDBデータベースのarticleテーブルにデータを追加するプログラムを動かしてみる。

    緑色の文字の部分 は自分の環境に合わせて書き換えること。

    InsertDB.java
    import java.sql.*;
    
    public class InsertDB {
        public static void main(String[] args) {
    	String host="127.0.0.1";
    	String db = "nittaDB";
    	String user = "nitta";
    	String pass = "PasswordOfNitta";
    	String tbl = "article";
    
    	String url=null;
    	Connection con=null;
    	PreparedStatement pst=null;
    	String insertSql = "insert into "+tbl
    	    +" (cdate,title,uname,contents) values(now(),?,?,?)";
    	try {
    	    Class.forName("org.mariadb.jdbc.Driver");
    	    url = "jdbc:mysql://"+host+"/"+db
    		+"?useUnicode=true&characterEncoding=utf8";
    	    con = DriverManager.getConnection(url,user,pass);
    	    pst = con.prepareStatement(insertSql);
    	} catch (Exception e) {
    	    e.printStackTrace();
    	    System.exit(1);
    	}
    
    	try {
    	    pst.setString(1,"山田太郎");
    	    pst.setString(2,"あいさつ");
    	    pst.setString(3,"こんにちは");
    	    pst.executeUpdate();
    	} catch (Exception e) {
    	    e.printStackTrace();
    	}
    	
    	try {
    	    pst.close();
    	    con.close();
    	} catch (Exception e) {}
        }
    }
    
    
    
    
    InsertDB.javaの実行例
    C:\Users\nitta> cd Documents\java\jdbc 
    C:\Users\nitta\Documents\java\jdbc> javac -encoding utf8 InsertDB.java  ← ソースのencodingを指定して、コンパイルする
    C:\Users\nitta\Documents\java\jdbc> java InsertDB      ← InsertDBを実行する。何も表示されなければエラーは起きていない。
    C:\Users\nitta\Documents\java\jdbc> echo %CLASSPATH%       ← CLASSPATH環境変数を値を表示してみる(オプション)
    .;C:\Users\nitta\Documents\java\lib\mariadb-java-client-2.7.0.jar;C:\xampp\tomcat\lib\servlet-api.jar
    C:\Users\nitta\Documents\java\jdbc> 



  3. pypMyAdminを表示しているブラウザで、nittaDBデータベースのarticleテーブルの[表示]タブを選択すると、テーブルに登録されているデータを確認できる。




javaプログラムでMariaDBデータベースサーバからデータを取得する

  1. SQLを使うJavaプログラムをコンパイルして実行してみる。
  2. ローカルホストのMariaDBと通信して、nittaDBデータベースのarticleテーブルのデータを取得するプログラムを動かしてみる。

    緑色の文字の部分 は自分の環境に合わせて書き換えること。

    SelectDB.java
    import java.sql.*;
    
    public class SelectDB {
        public static void main(String[] args) {
    	String host="127.0.0.1";
    	String db = "nittaDB";
    	String user = "nitta";
    	String pass = "PasswordOfNitta";
    	String tbl = "article";
    
    	String url=null;
    	Connection con=null;
    	Statement st=null;
    	try {
    	    Class.forName("org.mariadb.jdbc.Driver");
    	    url = "jdbc:mysql://"+host+"/"+db
    		+"?useUnicode=true&characterEncoding=utf8";
    	    con = DriverManager.getConnection(url,user,pass);
    	    st = con.createStatement();
    	} catch (Exception e) {
    	    e.printStackTrace();
    	    System.exit(1);
    	}
    
    	try {
    	    ResultSet rs = st.executeQuery("select * from "+tbl);
    	    while (rs.next()) {
    		int id = rs.getInt("id");
    		Date cd = rs.getDate("cdate");
    		String ti = rs.getString("title");
    		String un = rs.getString("uname");
    		String co = rs.getString("contents");
    		System.out.println(id+":"+cd+":"+ti+"["+un+"]");
    		System.out.println(co);
    	    }
    	} catch (Exception e) {
    	    e.printStackTrace();
    	}
    	
    	try {
    	    st.close();
    	    con.close();
    	} catch (Exception e) {}
        }
    }
    
    
    
    
    SelectDB.javaの実行例
    C:\Users\nitta> cd Documents\java\jdbc 
    C:\Users\nitta\Documents\java\jdbc> javac -encoding utf8 SelectDB.java  ← ソースのencodingを指定して、コンパイルする
    C:\Users\nitta\Documents\java\jdbc> java SelectDB      ← SelectDBを実行する。データベースのデータが表示される。
    1:2020-10-30:山田太郎[あいさつ]    ← id:cdate:uname[title]
    こんにちは                             ← contents
    
    C:\Users\nitta\Documents\java\jdbc>