SQLServer2000との接続

以前後輩がSQLServer2000を検証したとき、
なんだか変なエラーが発生するって言ってたんよね。
ひょんなことから今日はその調査をしました。


発生する現象はというと、

コネクションにsetAutoCommit(false)を設定して
StatementとPreparedStatementを両方取得するとエラーが発生する。

という内容。
まさかぁ〜、と思いつつも試してみると、
見事に後輩がいうエラーが発生。
エラー内容は以下の通り。

マニュアルトランザクションモードでクローン接続を開始できません。

なんのこっちゃ。
これじゃ同一トランザクション内では
SQLコンテナ一つしか作れないことになるじゃん。


んで調べてったら、最終的にdev2devに行き着きました。

注意 : 接続をトランザクション モードで使用するには、接続プールの 接続プロパティのリストに selectMethod=cursor を追加する必要がある。 このように設定することで、アプリケーションで特定の接続から同時に複数の文を 開くことが可能となる。 selectMethod=cursor を設定しない場合は、同時に開いた文ごとに、 接続の内部的なクローンが別々の DBMS ユーザとして作成される。 そのため、トランザクションを同時にコミットすることができなくなり、 デッドロックが発生することがある。

なるほど、selectMethod=cursorを指定すりゃ良かったんか。
ってなわけでコネクションを取得するところで
URLにselectMethod=cursorを追加っと。

String url = "jdbc:microsoft:sqlserver://localhost:1433;selectMethod=cursor;";
String user = "user";
String password = "password";
DriverManager.getConnection();

これで無事StatementもPreparedStatementも取得できました。
そんな設定があったのか。。。