« (FreeBSD)TomcatでServletする(2/2) | メイン | MovableType3.35インストール »

 MySQL Connector/J導入記

JDBCを使ってMySQLにアクセスするためのJava側のドライバとして、MySQL Connector/Jというものがある。
今回、JDK 1.3、Tomcat 4.1が動いている環境にMySQL Connector/J 5.0をインストールし、動かしてみて気付いたことや、遭遇したトラブルと実際に行った対処を書き留める。

(1) JDK 1.3でMySQL Connector/Jを使う時の注意点
MySQL Connector/Jのマニュアルの§1.1.1にあるが、JDK 1.4未満では、class verifierをOFFにする必要がある。コマンドラインからJava VMを起動する場合は、-Xverify:noneを指定すれば良い。

(2) JDK 1.3+TomcatでMySQL Connector/Jを使う時の注意点
上記(1)の制限により、TomcatのJava VM起動時オプションに"-Xverify:none"を指定する必要がある。FreeBSD 4.11でTomcat 4.1を動かしているこのサーバーでは、/etc/rc.confに

tomcat41_java_opts="-Xverify:none"

を加えている。

なお、シェルのコマンドラインからjavaコマンドを使用する場合は、mysql-connector-java.jarをJDKのディレクトリの下のjre/lib/ext/に置いておくとCLASSPATHの指定が不要になるが、Tomcatの場合はこれは無効である。インストールマニュアルの通り、mysql-connector-java.jarをTomcatのディレクトリの下のcommon/lib/に置く必要がある。

(3) MySQL Connector/JのExample 10がSQLエラーになる
あるMySQLのサーバーに対して、MySQL Connector/JのマニュアルのExample 10のコードを動かすと、

You have an error in your SQL syntax near 'DEFAULT, 'AUTO INCREMENT here?')' at line 1

というメッセージと共にSQLExceptionが発生した。
そのサーバーに対してMySQLのコマンドライン(クライアント)からサンプルコードと同等の処理である
INSERT INTO ... VALUES (DEFAULT, "...");

を実行すると、同様のエラーとなった。

MySQLのinfoによると、MySQLをconfigureする時にDONT_USE_DEFAULT_FIELDSを指定すると、そういう動作になるらしい。このコンパイルオプションはバージョン5.0.2で削除されているが、システム変数sql_modeをSTRICT_TRANS_TABLESにすると同じことが起こる。

このエラーを回避するには、rs.insertRow();の前に

rs.updateInt("priKey", 0);

を足すと良い。
第2引数は、0以外だと、auto incrementの初期値を与えることになるので正しくない。

トラックバック

このエントリーのトラックバックURL:
http://ynomura.dip.jp/cgi-bin/mt/mt-tb.cgi/63

コメント投稿フォーム

※投稿されたコメントはオーナーが承認するまで表示されません。


Powered by Movable Type 3.35