|
| |
2002/02/03 田中宏和 |
| Last Update
2003/01/20 |
|
 |
JDBC(MySQL)編 |
 |
◆JDBCとは? |
| JDBCとはJavaからデータベースにアクセスするためのAPIです。JDBCのAPIを使用してJavaのプログラムからデータベースにSQL文を発行してデータベースのデータの操作を行うことができます。 |
| ◆データベースとは? |
| データベースとはデータの集まりのことです。たくさんのデータを整理、分類して管理することによってユーザーが必要なデータを簡単に検索して取り出したり、またデータを追加、更新したりできるようになります。 |
| ◆MySQLとは? |
| MySQLは無料で使えるオープンソースのデータベースです。使いやすく軽快に動作することが特徴のRDBMS(リレーショナルデータベース管理システム)です。 |
| ◆ここでの環境 |
| OS |
Windows XP |
| J2SE SDK |
1.4.0 |
| データベース |
MySQL (バージョン3.23.49) |
|
|
|
| ◆Java実行環境の構築 |
| アプリケーション編を参考にしてJava実行環境を構築してください。 |
| ◆MySQLのダウンロードとインストール |
| MySQLはwww.mysql.comからダウンロードできます。ここではバージョン3.23.49のWindows版をダウンロードしました。 |
| MySQLのダウンロード → http://www.mysql.com/downloads/ |
| ダウンロードしたファイルを解凍したフォルダに入っているSETUP.EXEを実行することでインストールできます。 |
| ◆環境変数PATHの設定 |
| 環境変数PATHの値の一番最後にセミコロンを入れてC:\mysql\binを追加してください。環境変数の設定方法はアプリケーション編を参考にしてください。これでMySQLのコマンドが使えるようになります。 |
| ◆MySQLの起動 |
| MySQLの起動はmysqldコマンドでできます。--default-character-set=sjisを引数で指定して使用する文字セットを設定します。 |
| コマンドプロンプト |
C:\>mysqld --default-character-set=sjis
|
|
| ◆データベースの表示 |
| 存在するデータベースをみるにはmysqlshowコマンドでできます。最初から「mysql」と「test」という名前のデータベースが用意されています。新しいコマンドプロンプトを立ち上げてmysqlshowコマンドを実行してみましょう。 |
| コマンドプロンプト |
C:\>mysqlshow
+-----------+
| Databases |
+-----------+
| mysql |
| test |
+-----------+ C:\> |
|
| ◆データベースの作成 |
| 自分のデータベースを作ってみましょう。データベースの作成はmysqladminコマンドでできます。ここでは「hellodb」という名前のデータベースを作ることにします。 |
| コマンドプロンプト |
| C:\>mysqladmin -u
root create hellodb
C:\> |
|
| 作成されたかどうか見てみましょう。 |
| コマンドプロンプト |
C:\>mysqlshow
+-----------+
| Databases |
+-----------+
| hellodb |
| mysql |
| test |
+-----------+ C:\> |
|
| 作成されていますね。 |
| |
| ◆対話型MySQLクライアントの起動 |
| MySQLにはmysqlというコマンドで起動できる対話型ツールが利用できます。これを使用することによってデータベースに接続してSQL文を実行することができます。それでは実際にhellodbデータベースに接続してみましょう。 |
| コマンドプロンプト |
C:\>mysql -u root
hellodb
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 23 to server version: 3.23.49-nt
Type 'help;' or '\h'
for help. Type '\c' to clear the buffer.
mysql> |
|
| これでデータベースに接続できました。 |
| |
| ◆テーブルの作成 |
| SQL文を実行してテーブルを作成してみることにします。以下がここで実行するSQL文です。 |
| テーブルを作成するSQL文 |
CREATE TABLE HELLO_WORLD_TABLE (
NO INTEGER NOT NULL,
LANGUAGE VARCHAR(50),
MESSAGE VARCHAR(100),
PRIMARY KEY(NO)
); |
|
| それではSQL文を入力してみましょう。(上のSQL文をコピーしてコマンドラインに貼り付けてもOKです) |
| コマンドプロンプト |
mysql> CREATE TABLE
HELLO_WORLD_TABLE (
-> NO INTEGER NOT NULL,
-> LANGUAGE VARCHAR(50),
-> MESSAGE VARCHAR(100),
-> PRIMARY KEY(NO)
-> );
Query OK, 0 rows affected (0.01 sec) mysql> |
|
| これでテーブルが作成されました。ほんとに作成されているかテーブル一覧を表示していましょう。テーブル一覧を表示するにはshow
tablesというコマンドでできます。 |
| コマンドプロンプト |
mysql> show tables;
+-------------------+
| Tables_in_hellodb |
+-------------------+
| hello_world_table |
+-------------------+
1 row in set (0.00 sec) mysql> |
|
| できていますね。 |
| |
| ◆テーブルにデータの追加 |
| それではテーブルにデータを作ってみましょう。ここで作るデータは以下のようなデータです。 |
| NO |
LANGUAGE |
MESSAGE |
| 1 |
日本語 |
こんにちわ 世界 |
| 2 |
英語 |
Hello World |
|
| 上記のデータを追加するには以下のような2つのSQL文を実行します。 |
| テーブルにデータを追加するSQL文 |
INSERT INTO HELLO_WORLD_TABLE
VALUES ( 1 , '日本語' , 'こんにちわ 世界');
INSERT INTO HELLO_WORLD_TABLE
VALUES ( 2 , '英語' , 'Hello World');
|
|
| SQL文を入力して実行してみましょう。(上のSQL文をコピーしてコマンドラインに貼り付けてもOKです) |
| コマンドプロンプト |
mysql> INSERT INTO
HELLO_WORLD_TABLE
-> VALUES ( 1 , '日本語' , 'こんにちわ 世界');
Query OK, 1 row affected (0.00 sec) mysql>
INSERT INTO HELLO_WORLD_TABLE
-> VALUES ( 2 , '英語' , 'Hello World');
Query OK, 1 row affected (0.00 sec)
mysql> |
|
| 正常に追加されているか見てみることにしましょう。テーブルのデータを見るには以下のSQL文を実行します。 |
| テーブルのデータを表示するSQL文 |
SELECT * FROM HELLO_WORLD_TABLE; |
|
| SQL文を入力して実行してみましょう。(上のSQL文をコピーしてコマンドラインに貼り付けてもOKです) |
| コマンドプロンプト |
mysql> SELECT
* FROM HELLO_WORLD_TABLE;
+----+----------+------------------+
| NO | LANGUAGE | MESSAGE |
+----+----------+------------------+
| 1 | 日本語 | こんにちわ 世界 |
| 2 | 英語 | Hello World |
+----+----------+------------------+
2 rows in set (0.00 sec) mysql> |
|
| データが正常に追加されていますね。これでここでの対話型ツールでの作業は一通り終わったので対話型ツールを終了させましょう。終了するにはquitというコマンドを実行します。 |
| コマンドプロンプト |
mysql> quit
Bye C:\> |
|
| |
| ◆JDBCドライバのダウンロードとCLASSPATHへの追加 |
| JavaのアプリケーションからMySQLのデータベースへ接続するにはJDBCドライバが必要です。ODBC経由でAccessに接続する場合はJ2SE
SDKに最初からドライバが入っているので必要ありませんでしたが、MySQLの場合はドライバをダウンロードしてCLASSPATHへ追加しなければなりません。ドライバって言っていますが普通のJavaのライブラリです。 |
| JDBCドライバのダウンロード → http://www.mysql.com/downloads/api-jdbc.html |
ここではMySQL Connector/J 2 をダウンロードしました。
(ファイル名:mysql-connector-java-2.0.14.zip) |
ダウンロードしたらそのファイルを解凍しなければいけません。解凍するにはjarコマンドを使用します。
(参考) ダウンロードしたzipファイルを解凍するには |
| コマンドプロンプト |
| C:\作業フォルダ\MySQL>jar
-xf mysql-connector-java-2.0.14.zip C:\作業フォルダ\MySQL> |
|
| 解凍してできたmysql-connector-java-2.0.14という名前のフォルダに入っているmysql-connector-java-2.0.14-bin.jarをCLASSSPATHに追加してください。(追加方法はアプリケーション編を参考) |
| |
| ◆検索した結果を表示するコードの作成 |
| ■Javaソースコード |
JDBC編でODBC経由でAccessに接続した場合との違いは
1.ドライバクラスの違い
2.データベースのURLの違い
だけです。 わかりやすいようにODBCの場合のコードをコメントアウトして残してあります。 |
| HelloWorldJDBCMySQL.java(ここからダウンロード) |
import java.sql.*;
public class HelloWorldJDBCMySQL {
public static void main(String[] args) {
try {
// ドライバクラスをロード
// Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // ODBCの場合
Class.forName("org.gjt.mm.mysql.Driver"); // MySQLの場合
// データベースへ接続
// Connection con =
// DriverManager.getConnection("jdbc:odbc:helloworld"); // ODBCの場合
// MySQLの場合
String url = "jdbc:mysql:///hellodb?useUnicode=true&characterEncoding=SJIS";
Connection con = DriverManager.getConnection(url);
// ステートメントオブジェクトを生成
Statement stmt = con.createStatement();
String sql = "SELECT * FROM HELLO_WORLD_TABLE";
// クエリーを実行して結果セットを取得
ResultSet rs = stmt.executeQuery(sql);
// 検索された行数分ループ
while(rs.next()){
// NOを取得
int no = rs.getInt("NO");
// 言語を取得
String lang = rs.getString("LANGUAGE");
// メッセージを取得
String msg = rs.getString("MESSAGE");
// 表示
System.out.println(no + " " + lang + " " + msg);
}
// データベースから切断
stmt.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
} |
|
|
| ■コンパイルと実行 |
| コマンドプロンプト |
| C:\作業フォルダ\JavaHello>javac
HelloWorldJDBCMySQL.java C:\作業フォルダ\JavaHello>java
HelloWorldJDBCMySQL
1 日本語 こんにちわ 世界
2 英語 Hello World
C:\作業フォルダ\JavaHello> |
|
| おおおおお!表示されましたね! |
| |
| ◆行の削除、更新、追加をするコードの作成 |
| 次に行の削除、更新、追加を行うコードを作成します。行の削除、更新、追加を行うにはStatementインターフェースのexecuteUpdateメソッドを使用します。executeUpdateメソッドの戻り値は削除、更新、追加した行数になります。また、検索の場合はexecuteQueryメソッドを使用します。 |
| HelloWorldJDBCMySQLUpdate.java(ここからダウンロード) |
import java.sql.*;
public class HelloWorldJDBCMySQLUpdate {
public static void main(String[] args) {
try {
// ドライバクラスをロード
Class.forName("org.gjt.mm.mysql.Driver");
// データベースへ接続
String url = "jdbc:mysql:///hellodb?useUnicode=true&characterEncoding=SJIS";
Connection con = DriverManager.getConnection(url);
// ステートメントオブジェクトを生成
Statement stmt = con.createStatement();
// NOが3の行を削除するSQL文を作成します
String sql = "DELETE FROM HELLO_WORLD_TABLE " +
"WHERE HELLO_WORLD_TABLE.NO=3";
// クエリーを実行します
int result = stmt.executeUpdate(sql);
System.out.println(result + "行削除しました");
// NOが3の行を新しく追加するSQL文を作成します
sql = "INSERT INTO HELLO_WORLD_TABLE (NO,LANGUAGE,MESSAGE) " +
"VALUES(3 ,'ドイツ語','Hallo Welt')";
// クエリーを実行します
result = stmt.executeUpdate(sql);
System.out.println(result + "行追加しました");
// NOが1の行を新しい値で更新するSQL文を作成します
sql = "UPDATE HELLO_WORLD_TABLE "+
"SET LANGUAGE='スペイン語',MESSAGE='Hola Mundo' " +
"WHERE HELLO_WORLD_TABLE.NO=1";
// クエリーを実行します
result = stmt.executeUpdate(sql);
System.out.println(result + "行更新しました");
// 全ての行を検索するSQL文を作成
sql = "SELECT * FROM HELLO_WORLD_TABLE";
// クエリーを実行して結果セットを取得
ResultSet rs = stmt.executeQuery(sql);
// 検索された行数分ループ
while(rs.next()){
// NOを取得
int no = rs.getInt("NO");
// 言語を取得
String lang = rs.getString("LANGUAGE");
// メッセージを取得
String msg = rs.getString("MESSAGE");
// 表示
System.out.println(no + " " + lang + " " + msg);
}
// データベースから切断
stmt.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
} |
|
|
| ■コンパイルと実行 |
| コマンドプロンプト |
| C:\JavaHello\MySQL>javac
HelloWorldJDBCMySQLUpdate.java
C:\JavaHello\MySQL>java HelloWorldJDBCMySQLUpdate
0行削除しました
1行追加しました
1行更新しました
1 スペイン語 Hola Mundo
2 英語 Hello World
3 ドイツ語 Hallo Welt
C:\JavaHello\MySQL>
|
|
| おおおお!追加されて更新できましたね!もう一度実行するとNOが3の行が存在するため1行削除してから1行追加するようになります。 |
| コマンドプロンプト |
C:\JavaHello\MySQL>java
HelloWorldJDBCMySQLUpdate
1行削除しました
1行追加しました
1行更新しました
1 スペイン語 Hola Mundo
2 英語 Hello World
3 ドイツ語 Hallo Welt C:\JavaHello\MySQL> |
|
| おおお!削除してから追加できましたね! |
| |
| ◆MySQLの停止 |
| 最後にMySQLを停止させましょう。以下のコマンドで停止できます。 |
| コマンドプロンプト |
| C:\>mysqladmin
-u root shutdown
C:\> |
|
■関連 JDBC(トランザクション)編
JDBC(データソース)編 JDBC編
JDBC(PostgreSQL)編 プロパティファイル編 |
|
| |
|
|
| ツールの部屋
- Java関連の書籍 - デザインパターン - 情報交換掲示板
- HOME |