JavaでHello World
Google
  HOME  |  基礎  |  掲示板  |  ツール |  書籍  |  デザインパターン  |  リンク  |  フィードバック
JavaでHello World > JDBC(MySQL)編  
メニュー
Home
情報交換掲示板
ツールの部屋
Java関連の書籍
アプリケーション編
Swing編
Swing(イベント)編
Swing(Look&Feel)編
アプレット編
iアプリ編
サーブレット編
サーブレット(Linux)編
サーブレット(web.xml)編
サーブレット(セッション)編
サーブレット(クッキー)編
サーブレット(フィルタ)編
JSP編
JSP(ディレクティブ)編
JSP(アクション)編
JSP(スクリプト)編
JSP(オブジェクト)編
JSP(カスタムタグ)編
JSP(データベース)編
Apache + Tomcat編
Struts編
JDBC編
JDBC(データソース)編
JDBC(MySQL)編
JDBC(PostgreSQL)編
JDBC(トランザクション)編
JavaMail(SMTP)編
JavaMail(POP)編
JNI編
RMI編
RMI(アプレット)編
CORBA編
JNDI編
EJB編
EJB(Entity Bean)編
JMS(PTP)編
JMS(Pub/Sub)編
XML(SAX)編
XML(DOM)編
XSLT編
SOAP編
国際化編
国際化(タイムゾーン)編
国際化(通貨)編
リフレクション編
コレクション編
コレクション(Set)編
コレクション(List)編
コレクション(Map)編
スレッド編
正規表現編
アサーション編
ログ機能編
サウンド編
ファイル入出力編
URL編
ソケット編
データグラム編
HTTP
FTP編
jar編
javadoc編
Ant編
外部コマンド編
プロパティファイル編
システムプロパティ編
Eclipse編
  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