2005-10-31更新 2003-11-26作成

 ■MySQL JDBC接続

 ここでは MySQL をJavaから、JDBC(Java DataBase Connectivity)を通して使用するための設定について説明します。
 なおここではサーバーJavaの実行環境としてTOMCATを前提にしています。そのため実質的にはMySQLの設定というより、TOMCATの設定の話になります。その点をご了承ください。

 ■JDBC接続

 ◇JDBCドライバ

 まずJavaプログラムから MySQL に接続するための、JDBCドライバのインストールについて説明します。
 一番最初のほうの「MySQL最新版の場所」で説明した「MySQL Connecter/J」からJDBCドライバをダウンロードしてあると思います。これはZIP形式で圧縮されていますが、この中に mysql-connector-java-3.1.nn というディレクトリがあります(3.1.nnの部分のnnはバージョンを表していて、2005/10/31では 3.1.11 でした)。その下に mysql-connector-java-3.1.nn-bin.jar というファイルがあり、これが MySQL のJDBCドライバです。これを %CATALINA_HOME%\common\lib にコピーしてください。

 ◇JDBC接続パラメータ

 接続パラメータはJavaソース上に直接記述してもいいんですが、ここはコンテキストパラメータの設定コンフィグパラメータの設定で説明した、TOMCATに設定する初期化パラメータを使いましょう。
 以下の説明ではコンテキストパラメータを使いますが、コンフィグパラメータでも同じことです。

 必要なパラメータは、JDBCドライバ名、DBサーバーの指定、DBのユーザーID、DBパスワード、です。実際のパラメータ名は各自の環境で作ればいいんですが、例をあげておきます。

web.xmlの設定例

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">

<web-app>

<!-- JDBCに関するパラメータ設定 (MySQL) -->
  <context-param>
    <param-name>jdbcDriver</param-name>
    <param-value>com.mysql.jdbc.Driver</param-value>
    <description>JDBC Driver</description>
  </context-param>

  <context-param>
    <param-name>jdbcUri</param-name>
    <param-value>jdbc:mysql://localhost:3306/test_db?useUnicode=true&amp;
characterEncoding=sjis</param-value>
    <description>MySQL URI</description>
  </context-param>

  <context-param>
    <param-name>dbUser</param-name>
    <param-value>root</param-value>
    <description>MySQL DB USER</description>
  </context-param>

  <context-param>
    <param-name>dbPassword</param-name>
    <param-value></param-value>
    <description>MySQL DB PASSWORD</description>
  </context-param>
<!-- ここまで -->


  <servlet>
    <servlet-name>
      サーブレット名
    </servlet-name>
    <servlet-class>
      パッケージ名.サーブレット名
    </servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>invoker</servlet-name>
    <url-pattern>/servlet/*</url-pattern>
  </servlet-mapping>

</web-app>

 この中でパラメータ名jdbcDriverに対する値設定は、この例のままでいいです。
 パラメータ名dbUserとdbPasswordに対する値は、各自が使うDBのユーザー設定に合わせてください。この例ではデフォルトインストールのままで特にユーザーの作成も何もしていない状態、標準で定義されている管理者ユーザー root でパスワード無しで接続するためのものです。

 パラメータ名jdbcUriで指定しているのが、接続するDBサーバーに関する情報です。
 値の中で jdbc:mysql: まではこのままでいいです。

 次の//以降は各環境によって変わります。//直後に指定するのがDBサーバーの指定で、ホスト名やIPアドレスで指定します。例ではここが localhost となっていますが、TOMCATとMySQLが同じマシンで動いている場合です。TOMCATを動かしているAPサーバーとDBサーバーが別のマシンである場合、IPアドレスやホスト名でDBサーバーを指定してください。
 次の : の後ろがMySQLが通信で使うポート番号になります。3306はMySQLのデフォルト値です。インストール時の設定でポート番号を変更しているときは、その変更した番号を指定してください。
 最後の : の後ろが、接続先のDB名になります。
 その後ろの ? 以降はJavaからMySQLに接続するとき、具体的には DriverManager に対して getConnection メソッドで Connection を取得しますが、このときJDBCドライバに渡すパラメータ内容です。

 まず useUnicode パラメータですが、JDBCドライバが文字列を扱うときにunicodeを使用するか否かを指定します。Javaでは原則として文字コードはunicodeで取り扱うため、ここでは true を指定しておきます。
 次の characterEncoding パラメータですが、これはMySQLで定義したテーブル上の文字列の文字コードを指定します。MySQLの設定で説明したように、ここではデータベースに格納する文字列はShiftJISを使うようにしています。そこでパラメータ値として sjis を指定します。文字コードに utf8 を指定した場合はこの限りではありません。

 ・記述方法の問題

 さてこのjdbcUriの内容をJavaソース上に直接記述(ハードコーディング)する場合は、
 DriverManager.getConnection(jdbc:mysql://localhost:3306/test_db?useUnicode=true&characterEncoding=sjis)
となります。しかしここではこういった接続情報のようなものはプログラムソースに直接記述するのではなく、コンテキストパラメータのような外部パラメータとして記述する方法を採っています。TOMCATの場合はこれをweb.xmlに記述しますが、ここで問題が生じます。それはパラメータが複数あるときの、次のパラメータ開始を示す & という文字です。

 パラメータ記述場所であるweb.xmlは、拡張子の.xmlが示すとおりXML形式で記述することになります。XMLにおいてはHTMLと同様、 & は実体参照を表す特殊文字として扱われ、そのまま記述することは出来ません。例えばHTMLでは文中に < を記述したい場合、この < はHTMLタグの開始を表す記号であるのでそのまま書くことは出来ませんでした。この場合 < と表示したい部分は &lt; と記述しましたが、これと同じようなことです。 & から ; までは実体参照を表す内容とみなされるのです。今の &lt; で言うと、 & から ; までが実体参照の意味になり、間の lt< を表すということです。
 そこでweb.xml上に接続パラメータを記述する場合、 & の部分は実体参照と解釈されないように実体参照を使って(ちょっとややこしいですね)、 &amp; と記述します。


このページの先頭  技術メモ先頭  サーバーJava入門先頭  MySQL編先頭

Copyright © 2003-2005 YOK. All Rights Reserved.