Javaでデータベースプログラミング(MySQL環境構築)

Javaで開発をするようになってもう1年半ぐらい経過しているのですが、データベースプログラミングをする機会がありませんでした。ちょうど夏季休暇のこの時期を利用して、色々と触ってみることにしました。

MySQLのインストール

まずは、MySQL Community Serverを以下のダウンロードページからダウンロードします。Intel Mac用にパッケージ(dmgファイル)が用意されているので、そのまま利用しました。

MySQL 6は、というよりMySQL自体をあまり触る機会がなかったので、情報が充実していそうなMySQL 5.1をダウンロードしてきました。

あとは、Connector/Jも必要になるので、これもあわせて以下のダウンロードページからダウンロードします。

ダウンロードしたConnector/Jをクラスパスに通すだけでもいいのですが、せっかくMaven2を使っているので、自分のローカルリポジトリへインストールしておきます。

lucifer-2:~ kouichi$ mvn install:install-file -Dfile=/Users/kouichi/Downloads/mysql-connector-java-5.1.6/mysql-connector-java-5.1.6-bin.jar -DgroupId=com.mysql.jdbc -DartifactId=mysql-connector-java -Dversion=5.1.6 -Dpackaging=jar -DgeneratePom=true
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'install'.
[INFO] artifact org.apache.maven.plugins:maven-install-plugin: checking for updates from central
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-install-plugin/2.2/maven-install-plugin-2.2.pom
2K downloaded
Downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-install-plugin/2.2/maven-install-plugin-2.2.jar
15K downloaded
[INFO] ----------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO]    task-segment: [install:install-file] (aggregator-style)
[INFO] ----------------------------------------------------------------------------
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-digest/1.0/plexus-digest-1.0.pom
1K downloaded
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-components/1.1.7/plexus-components-1.1.7.pom
4K downloaded
Downloading: http://repo1.maven.org/maven2/org/codehaus/plexus/plexus-digest/1.0/plexus-digest-1.0.jar
11K downloaded
[INFO] [install:install-file]
[INFO] Installing /Users/kouichi/Downloads/mysql-connector-java-5.1.6/mysql-connector-java-5.1.6-bin.jar to /Users/kouichi/.m2/repository/com/mysql/jdbc/mysql-connector-java/5.1.6/mysql-connector-java-5.1.6.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7 seconds
[INFO] Finished at: Wed Oct 08 17:59:31 JST 2008
[INFO] Final Memory: 3M/5M
[INFO] ------------------------------------------------------------------------

pom.xmlにさきほどローカルリポジトリへインストールしたライブラリをdependencyに追加しておきます。

<?xml version="1.0" encoding="UTF-8"?><project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>JavaDataAccessPractice</groupId>
  <artifactId>JavaDataAccessPractice</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <description></description>
  <dependencies>
    <dependency>
      <groupId>com.mysql.jdbc</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.6</version>
    </dependency>
  </dependencies>
</project>

権限付与

rootアカウントにて接続し、普段利用するkouichiというアカウントに全権限を付与します。

lucifer-2:~ kouichi$ mysql -u root
mysql> grant all on *.* to 'kouichi'@'localhost';
Query OK, 0 rows affected (0.00 sec)

パスワード設定

kouichiアカウントのパスワードを設定しておきます。

lucifer-2:~ kouichi$ mysqladmin -u kouichi -h localhost password "kouichi"

データベース作成

kouichiアカウントでデータベースjava_progを作成します。

lucifer-2:~ kouichi$ mysql -u kouichi -p
mysql> CREATE DATABASE java_prog;
Query OK, 1 row affected (0.00 sec)

文字化け対策

日本語を含むデータをINSERTすると文字化けを起こしてしまったので、CHARACTER SETを確認します。見てみると、latin1となっていました。これは文字化けしてしまいます。ということで、すべてUTF-8に統一することにしました。

mysql> SHOW VARIABLES LIKE 'char%';
+--------------------------+--------------------------------------------------------+
| Variable_name            | Value                                                  |
+--------------------------+--------------------------------------------------------+
| character_set_client     | latin1                                                 | 
| character_set_connection | latin1                                                 | 
| character_set_database   | latin1                                                 | 
| character_set_filesystem | binary                                                 | 
| character_set_results    | latin1                                                 | 
| character_set_server     | latin1                                                 | 
| character_set_system     | utf8                                                   | 
| character_sets_dir       | /usr/local/mysql-5.1.28-rc-osx10.5-x86/share/charsets/ | 
+--------------------------+--------------------------------------------------------+
8 rows in set (0.00 sec)

UTF-8に統一するために、/etc/my.cnfを新規に作成しました。(ここら辺は、あまり自信がないですが...)

[mysql]
default_character_set=binary

[mysqld]
default_character_set=utf8
skip-character-set-client-handshake

どうやらUTF-8で統一するためには、データベースを作成するタイミングで、DEFAULT CHARACTER SETを指定するべきだったようなので、再作成します。

lucifer-2:~ kouichi$ mysql -u kouichi -p
mysql> CREATE DATABASE java_prog DEFAULT CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)

もう一度CHARACTER SETを確認してみると、ばっちりUTF-8になっており、日本語データをINSERTしても文字化けはしなくなりました。

mysql> show variable like 'char%';
mysql> SHOW VARIABLES LIKE 'char%';+--------------------------+--------------------------------------------------------+| Variable_name            | Value                                                  |
+--------------------------+--------------------------------------------------------+
| character_set_client     | utf8                                                   | 
| character_set_connection | utf8                                                   | 
| character_set_database   | utf8                                                   | 
| character_set_filesystem | binary                                                 | 
| character_set_results    | utf8                                                   | 
| character_set_server     | utf8                                                   | 
| character_set_system     | utf8                                                   | 
| character_sets_dir       | /usr/local/mysql-5.1.28-rc-osx10.5-x86/share/charsets/ | 
+--------------------------+--------------------------------------------------------+
8 rows in set (0.01 sec)

ということで

やっと色々と触り始めることにしました。参考にしているのは、以下の書籍です。

Javaデータアクセス実践講座 (DB Magazine SELECTION)
松信 嘉範
翔泳社
売り上げランキング: 74329