JavaでMySQLを操作する基本的な部分について書きました。
JDBCドライバの取得
JavaからMySQLへ接続するにはJDBCドライバが必要です。 MySQL :: Download Connector/J からダウンロードして下さい。ダウンロードしたら解凍して、中のjarファイルを使用します。
$ tar zxvf mysql-connector-java-5.1.35.tar.gz $ ls mysql-connector-java-5.1.35/mysql-connector-java-5.1.35-bin.jar mysql-connector-java-5.1.35/mysql-connector-java-5.1.35-bin.jar
Maven リポジトリは以下の通り。
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.35</version> </dependency>
compile 'mysql:mysql-connector-java:5.1.35'
MySQLへの接続
まずはMySQLへの接続を試します。ローカルインストールしたMySQLの test データベースに root ユーザーで接続します。パスワードは設定していません。
import java.sql.*; public class MySQLConnector { public static void main(String[] args) { Connection con = null; try { // JDBCドライバのロード - JDBC4.0(JDK1.6)以降は不要 Class.forName("com.mysql.jdbc.Driver").newInstance(); // MySQLに接続 con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", ""); System.out.println("MySQLに接続できました。"); } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) { System.out.println("JDBCドライバのロードに失敗しました。"); } catch (SQLException e) { System.out.println("MySQLに接続できませんでした。"); } finally { if (con != null) { try { con.close(); } catch (SQLException e) { System.out.println("MySQLのクローズに失敗しました。"); } } } } }
IDEを使わずにターミナルでサクッと試したい場合は適当なディレクトリを作成して次のように実行します。
$ javac -cp lib/mysql-connector-java-5.1.35-bin.jar: MySQLConnector.java $ java -cp lib/mysql-connector-java-5.1.35-bin.jar: MySQLConnector MySQLに接続できました。
データの取得
次のようなテーブルを使ってデータを取得してみます。
mysql> desc programing; +-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | 0 | | | name | varchar(255) | YES | | NULL | | +-------+--------------+------+-----+---------+-------+ 2 rows in set (0.00 sec) mysql> select * from programing; +------+------+ | id | name | +------+------+ | 1 | Java | | 2 | Ruby | | 3 | PHP | +------+------+ 3 rows in set (0.01 sec)
データを取得するにはStatement
を作成してexecuteQuery()
でSQLを渡すとResultSet
のオブジェクトで返ってきます。
// JDBCドライバのロード - JDBC4.0(JDK1.6)以降は不要 Class.forName("com.mysql.jdbc.Driver").newInstance(); // MySQLに接続 con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", ""); System.out.println("MySQLに接続できました。"); Statement stm = con.createStatement(); String sql = "select * from programing"; ResultSet rs = stm.executeQuery(sql); while(rs.next()){ int id = rs.getInt("id"); String name = rs.getString("name"); System.out.println("取得結果 -> " + id + ":" + name); }
実行結果は次の通りです。
MySQLに接続できました。 取得結果 -> 1:Java 取得結果 -> 2:Ruby 取得結果 -> 3:PHP
データの更新・追加・削除
UPDATE、INSERT、DELETEのSQLを実行したい場合は、executeUpdate()
でSQLを渡します。結果は更新した行数が返ってきます。
// JDBCドライバのロード - JDBC4.0(JDK1.6)以降は不要 Class.forName("com.mysql.jdbc.Driver").newInstance(); // MySQLに接続 con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", ""); System.out.println("MySQLに接続できました。"); Statement stm = con.createStatement(); String sql = "insert into programing values(4, 'Python'), (5, 'Go')"; int result = stm.executeUpdate(sql); System.out.println("更新件数は" + result + "です。");
実行結果は次の通りです。
MySQLに接続できました。 更新件数は2です。
テーブルにもデータが追加されていました。
mysql> select * from programing; +----+--------+ | id | name | +----+--------+ | 1 | Java | | 2 | Ruby | | 3 | PHP | | 4 | Python | | 5 | Go | +----+--------+ 5 rows in set (0.00 sec)