0

jdbc の jtds1.2.jar 実装を使用し、ストアド プロシージャを実行して、sqlServer 2008 に接続しようとしています。 私はそれを成功させるテストアプリケーションを書きました

私は自分のenv(アプリケーションサーバー環境ではない)でそれを行うのに問題があります。Java 1.4 を使用しています。jtds を最初に表示するようにクラスパスを設定しました。メソッド DriverManager.getConnection... を呼び出すと、ソース コードは jtds ソース コードではありません。これが私のコードです(例と同じコードです):

Class.forName("net.sourceforge.jtds.jdbc.Driver");
String url = "jdbc:jtds:sqlserver://" + serverIP + ":" + port + "/" + serviceName;
java.util.Enumeration myEnum = DriverManager.getDrivers();
Connection connection = DriverManager.getConnection(url,userName,password);

デバッグ中: myEnum には 2 つのドライバーがあります:

  1. sun.jdbc.odbc.jdbcodbcdriver

  2. jtds ドライバー

DriverManger が最初のものをロードしたことを恐れています。

jtds ドライバーを確実にロードするにはどうすればよいですか?

どうもありがとう

4

1 に答える 1

0

正直なところ、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を参照してください。

于 2011-02-04T23:09:05.227 に答える