正直なところ、jTDS ドライバーを使用する必要があることを明確に指定したにもかかわらず、DriverManager が JDBC-ODBC ブリッジ ドライバーを使用しようとする理由がわかりません。接続 URL の 2 番目の部分はjtds
、DriverManager に jTDS ドライバーを使用するように指示するものです。DriverManager が JDBC-ODBC ブリッジ ドライバをロードしたと確信できる理由は何ですか?
私のシステムでは、 enumeration にも同じ 2 つのエントリがありましたDriverManager.getDrivers()
。ただし、JDBC-ODBC ブリッジ ドライバーがこのリストの最初にあるからといって、おそらくそれを介して SQL Server に接続できるからといって、DriverManager がそれを選択するとは限りません。あなたは jTDS ドライバーを要求しましたが、それを使用するか、まったく使用しません。
への呼び出しで意図的に誤ったユーザー名とパスワードを入力するとどうなりますgetConnection
か? これを行ったとき、jTDS を使用していることを明確に示すスタックトレースを取得しました。
java.sql.SQLException: ユーザー 'x' のログインに失敗しました。
net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic (SQLDiagnostic.java:368) で
net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken (TdsCore.java:2820) で
net.sourceforge.jtds.jdbc.TdsCore.nextToken (TdsCore.java:2258) で
net.sourceforge.jtds.jdbc.TdsCore.login (TdsCore.java:603) で
net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init> (ConnectionJDBC2.java:345) で
net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init> (ConnectionJDBC3.java:50) で
net.sourceforge.jtds.jdbc.Driver.connect (Driver.java:184) で
java.sql.DriverManager.getConnection(DriverManager.java:582) で
java.sql.DriverManager.getConnection(DriverManager.java:185) で
...
編集:あなたのコメントであなたが書いた:
getconnection メソッドのデバッグ時に、src コードが jtds1.2 ソース コードと一致しない
ここで何を意味しているのか完全にはわかりませんが、デバッガーを使用してコードをステップ実行していて、getConnection
メソッドにステップインしようとしても、デバッガーが jTDS ソース コードにジャンプしないのではないかと推測しています。通常、デバッガーは JAR のソース コードを自動的に取得しません。ソース コードをデバッガーに「添付」する必要があります。これを行う方法は、使用しているデバッガーによって異なります。
ただし、メソッドにステップインする理由がわかりませんgetConnection
。データベースへの接続に問題があると思います。すべてのデータベース接続の詳細が正しいですか? 別のプログラム (SQL Server Management Studio など) を使用してデータベースに接続できますか?
最後に (これは完全な推測ですが、以前にも同じ問題が発生したことがあります)、SQL Server の Express エディションに接続しようとしていますか? その場合は、データベースで TCP/IP 接続を有効にする必要があります。JDBC は TCP/IP 接続を使用して SQL Server に接続します。Express エディションでは、これらの接続はデフォルトで無効になっています。これを行う方法については、 http://softwaresalariman.blogspot.com/2007/04/jdbc-to-sql-server-express.htmlを参照してください。