MySQL Connector/Jの覚え書き

3月 29, 2010

MySQLとJavaの連携について、「基本中の基本」をまとめてみた。

JavaからMySQLへアクセスするには、JDBCドライバと呼ばれるライブラリを使用する。
JDBC(Java DataBase Connectivity)は、JavaからRDBMSにアクセスするための標準APIとなる。
JDBC自体は仕様であり、JDBCドライバが別途必要になる。
(自信はないが、Perl-MySQLにおけるDBI/DBDと同じような仕組みと考えてよいだろうか、、、?)

JDBC APIはjava.sqlパッケージ(J2SEの標準API)に含まれているが、実装においては
JDBCドライバが吸収する形となる。
JDBC APIの実体はデータベース接続への取り決めと接続ドライバを管理するための
マネージャクラスであり、個別のデータベースへの接続機能を提供するのはJDBCドライバとなる。

MySQLにおけるJDBCドライバは複数公開されているらしいが、
Connector/J が公式ドライバとなる。

Connector/JをMySQLのオフィシャルサイトからダウンロードしてアーカイブを展開すると、
JDBCドライバの本体であるmysql-connector-java-5.x.x-bin.jarファイルが生成される。
これをJavaプログラム実行時のクラスパスに含めるようにする。

Javaプログラムにおいては、おおまかには以下のような流れになるものと思われる。

プリペアドステートメントの宣言
※プリペアドステートメントは使用しないケースもある

ドライバをロード

接続の確立

SQL文の実行

プリペアドステートメントの解放処理

接続の解放処理


Connector/J – MySQL接続時注意点
MySQLとの接続においては、接続先URL、ポート番号、データベース名、ユーザ名、
パスワード等の情報を記述する。ここでの通信プロトコルはTCP/IPであり、ローカル
からの接続であってもソケットファイルは使えないことに注意。
この辺りについては、オフィシャルサイトに確かに書いてある。

(抜粋)
javaはUnix Domain Sockets をサポートしないため、MySQL Connector/J
MySQLへの接続にTCP/IPソケットを使用する必要があります。


Connector/JからMySQL接続時には複数のSQL文が自動で実行されるため、通常の
クライアントツールmysqlに比べるとオーバーヘッドが大きくなってしまう。
コネクションプーリングの利用などで接続処理を回避するような設計が望ましいかもしれない。
他にも、設定ファイルmy.cnfのinit_connectで指定した処理が上書きされるケースも
あるため注意。上書きされないようにするにはJDBCの接続パラメータで明示的に指定する。
なお、接続時のSQL文はクエリログを有効にしておけば記録される。
ただしこのクエリログ自体大量に出力されてしまうため、本稼働中は無効にしておく
のが望ましいと思われる。

解放処理について。Connector/JではConnectionクラスのclose()を実行すると、
関連のあるStatement/PreparedStatement/ResultSetをまとめてクローズしてくれる。
このため個別のStatement/PreparedStatementクローズ処理は省略可能と考えてよいが、
他のJDBCドライバによってはそうでないケースもある。その場合省略すると、不要になった
Statement/PreparedStatementオブジェクトがメモリ上に残ったままになってしまうので注意。

えーとそれから、以下によるとConnector/J はフェイルオーバーサポート機能があるそうだ。
「フェイルオーバーはトランザクションの進行中は確実でないため、接続が
autoCommit(true) 状態にある時にのみ起こる」とのこと。他にもいろいろ書いてあるが、
正直今の自分にはついていけない。大体、Javaをどうにかしないと(汗)。
http://dev.mysql.com/doc/refman/5.1/ja/connector-j-reference-configuration-properties.html

実際のところまだまだ分かっていないので、手も動かして学習しないといけないな。
以下のリファレンスマニュアルもちゃんと読んでおくべきなのだろう。
が、正直今の自分には(略)・・・
24.4. MySQL Connector/J

主な出典
「現場で使えるMySQL」松信嘉範著

Categories: MySQL

No Responses so far | Have Your Say!

Comments are closed.