はしくれエンジニアもどきのメモ

情報系技術・哲学・デザインなどの勉強メモ・備忘録です。

Java でデータベース(MySQL) にアクセス

Java でデータベース(MySQL)にアクセス

Java でデータベース(MySQL)にアクセスしてみたのでメモ。

環境

文字コードの設定は、以下参照。

cartman0.hatenablog.com

テスト用DBの準備

sample という名前のDBを作成。

ログイン


mysql -u root -p

sampleという名前のデータベースの作成。


create database sample character set 'utf8';

user というtable を作成。 属性は、id, pass, name, age とする。


create table user(id varchar(5) not null primary key, pass varchar(20) not null, name varchar(10), age int) character set 'utf8';

一覧を見ると


mysql> select * from user;
+-------+----------+--------+------+
| id    | pass     | name   | age  |
+-------+----------+--------+------+
| web01 | password | Taro   |   20 |
| web02 | password | Jiro   |   10 |
| web03 | password | Saburo |    7 |
| web04 | pass     | Siro   |    1 |
+-------+----------+--------+------+
4 rows in set (0.00 sec)

Java からDB へアクセス してCatalog名を出力するサンプル

JDBCドライバを使えば簡単にデータベースに接続できる。 MySQLJDBCドライバであれば NetBeans 8 ではすでにインストールされている。

JDBC - Wikipedia

JDBCドライバのライブラリを追加

NetBeansではJDBCドライバはすでにインストールされているが、各プロジェクトにライブラリを追加する必要がある。

ライブラリの追加は、 プロジェクトの中の「ライブラリ」 を右クリックして「ライブラリの追加」を選択。 「MySQL JDBCドライバ」を選択して追加する。

ライブラリ JDBCドライバを追加

コード

接続には、Connectionオブジェクトを使う。 DriverManager から getConnection を呼び、 DBの名前、ユーザ名とパスワードを与える。


        Connection connection_mysql = null;
           /*
            * データベースと接続
            * 「ライブラリの追加」で「MySQL JDBCドライバ」を追加しておく
            */
           connection_mysql = DriverManager.getConnection("jdbc:mysql://localhost:3306/sample", "user_name", "password");
      

Connectionオブジェクトから .getCatalog() メソッドでCatalog名(DB名)を取得。


System.out.println("getCatalog: " + connection_mysql.getCatalog());

JDBCドライバでMySQLのDBにアクセス

実行結果

MySQL に接続できれば、 Catalog名(DB名)が出力される。

NetBeansコンソールにDBのCatalog名を表示
Catalog名を出力

DAOクラス(パターン)でデータベースに接続

データベースにアクセスする際、 DataAccessObject (DAO) を使うことで、データベースアクセス処理の部分を抽象化できる。DAOのみで データベース処理専門の処理クラスとする。

参考:DAOパターン サルでもわかる 逆引きデザインパターン 第3章 逆引きカタログ J2EE編 DAO(Data Access Object)

DAOクラスの作り方(必要機能)

  • DBへの接続

    Connection オブジェクトを使って接続する。

    
    Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/sample", "root", "password");
    
    

    参考:Connection (Java Platform SE 8)

  • SQL文を作成

    SQL文には、 prepareStatement() を使う。 (Statement よりSQLインジェクションが起きにくい。 シングルクォートなどがエスケープされる。)

    参考:竹形誠司 ブログ:Java+MySQL+Tomcat:SQLの実行にはStatementよりPreparedStatementを使おう

    SQL文を実行するには、 PreparedStatement オブジェクトの.executeQuery()を使う。 ResultSet オブジェクトに 実行結果が格納される。

    
    PreparedStatement pre_statement = connection.prepareStatement("select * from user");
    ResultSet result_set = pre_statement.executeQuery();
    
    参考:PreparedStatement (Java Platform SE 8)

    参考:ResultSet (Java Platform SE 8)

  • SQLの実行結果を確認

    ResultSetオブジェクトの .nexr()メソッドで次のレコードに移動する。

    .getString('カラム名') で そのカラムの値をString型で取得できる。 他にもgetInt() など 各型で用意されている。

    
    while(result_set.next() /* 次のレコードに移動 */ ){
      System.out.println(result_set.getString("name"));
    }
    
  • close処理を行う

    Connection, PreparedStatementResultSet オブジェクトは、 DBと接続しているので、 closeメソッドを使って、DBとの接続を解除する。 解除しなままだと上限に達し、いずれ接続できなくなる。 try-cactch-finalyの finalyの中に書くことが多い。

    
      if (con != null) {
          con.close();
      }
      if (ps != null) {
          ps.close();
      }
      if (rs != null) {
          rs.close();
      }
    

コード

access MySQL DB by DAO pattern, print "name" of co ...

実行結果

"name" カラムの値が表示される。

SQL文'select * from user;'が実行され、カラムnameの値がNetBeansコンソールに表示される
MySQL(DB)の "name" カラムの値を表示