Java でデータベース(MySQL) にアクセス
Java でデータベース(MySQL)にアクセス
Java でデータベース(MySQL)にアクセスしてみたのでメモ。
環境
文字コードの設定は、以下参照。
テスト用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ドライバを使えば簡単にデータベースに接続できる。 MySQL用JDBCドライバであれば NetBeans 8 ではすでにインストールされている。
JDBCドライバのライブラリを追加
NetBeansではJDBCドライバはすでにインストールされているが、各プロジェクトにライブラリを追加する必要がある。
ライブラリの追加は、 プロジェクトの中の「ライブラリ」 を右クリックして「ライブラリの追加」を選択。 「MySQL 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());
実行結果
MySQL に接続できれば、 Catalog名(DB名)が出力される。
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");
-
SQL文を作成
SQL文には、
prepareStatement()
を使う。 (Statement よりSQLインジェクションが起きにくい。 シングルクォートなどがエスケープされる。)参考:竹形誠司 ブログ:Java+MySQL+Tomcat:SQLの実行にはStatementよりPreparedStatementを使おう
SQL文を実行するには、
PreparedStatement
オブジェクトの.executeQuery()
を使う。ResultSet
オブジェクトに 実行結果が格納される。
参考:PreparedStatement (Java Platform SE 8)PreparedStatement pre_statement = connection.prepareStatement("select * from user"); ResultSet result_set = pre_statement.executeQuery();
-
SQLの実行結果を確認
ResultSet
オブジェクトの.nexr()
メソッドで次のレコードに移動する。.getString('カラム名')
で そのカラムの値をString型で取得できる。 他にもgetInt()
など 各型で用意されている。while(result_set.next() /* 次のレコードに移動 */ ){ System.out.println(result_set.getString("name")); }
-
close処理を行う
Connection
,PreparedStatement
とResultSet
オブジェクトは、 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"
カラムの値が表示される。
参考リンク
-
サルでもわかる 逆引きデザインパターン 第3章 逆引きカタログ J2EE編 DAO(Data Access Object)
-
竹形誠司 ブログ:Java+MySQL+Tomcat:SQLの実行にはStatementよりPreparedStatementを使おう