現行システムがJava1.4.2で動いています。
そのシステムは現状はSQL Server 2000へSQL Server 2000のJDBCドライバを使って接続しています。
その時の接続文字列は以下の通りです。
driver_url=jdbc:microsoft:sqlserver://(マシン名):(ポート);SelectMethod=Cursor
driver_name=com.microsoft.jdbc.sqlserver.SQLServerDriver
システム改編に伴いDBがSQLServer2005で、対象データベースのみ80モード(SQLServer2000)にしていくので、
JDBCをそのまま2000のを使って、接続してみようとしたところ、
「java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]着信の表形式のデータ ストリーム (TDS) リモート プロシージャ コール (RPC) プロトコル ストリームが不適切です。パラメータ 1 (""): データ型 0x38 が不明です。」
というエラーが出てしまった。
ちょっと調べて「SelectMethod=Cursor」をはずしたらいけるんじゃね?って感じだったので、はずしてみたところ
接続はできました。
・・・がっ、今度は更新部分で1コネクションから複数Statementを作成するので
「java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]マニュアルトランザクションモード中は、複製した接続を開始できません。」
というエラーが・・・・
まぁ、1つのConnectionで閉じられていないStatementを複数作る方がいけないわね・・・って思ったら
いたるところでやっているじゃないですか・・・・。
なんでSQLServer2000では大丈夫だったのだ・・・?
まぁ、直しが多いしどうしたもんかなぁって悩んでいましたが
とりあえず、ものは試しということで、SQLServer2005のJDBC(1.2)を落とし、
ライブラリ参照を変えてやってみた。
(ここでdriver_urlや、 driver_nameの変更をしなかった・・・・orz)
そうしたら今度は
java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
や
java.sql.SQLException: No suitable driver
が出たので、driver_urlとdriver_nameを比較してみた。
| driver_url |
| SQLServer2000JDBC |
jdbc:microsoft:sqlserver://(サーバ名):(ポート名);SelectMethod=Cursor |
| SQLServer2005JDBC |
jdbc:sqlserver://(サーバ名):(ポート名);SelectMethod=Cursor |
| driver_name |
| SQLServer2005JDBC |
com.microsoft.jdbc.sqlserver.SQLServerDriver |
| SQLServer2005JDBC |
com.microsoft.sqlserver.jdbc.SQLServerDriver |
・・・・微妙な変化がありました(苦笑
でも、これでマニュアルトランザクションモードのコネクションを使った
複数Statementの作成ができるようになったし・・・・。
そんなこんなで、半日ほどハマってしまった夏椰でした。(爆
疲れました。(苦笑