36

次のコードを実行しようとしています。

import java.sql.DriverManager;

public class Connect {
    public static void main(String[] args){
        try{
            String databaseDriver = "net.sourceforge.jtds.jdbc.Driver";
            Class.forName(databaseDriver);
        }
        catch (Exception e) {
            e.printStackTrace();
        }

        try{
            String url = "jdbc:jtds:sqlserver://BHX:1433/Forecast;instance=SQLEPXRESS";
            java.sql.Connection con = DriverManager.getConnection(url);
            System.out.println("Connection");
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }
}

私の SQL サーバーは、マシン BHX のポート 1433 で実行されています。

私が得ているエラーメッセージは次のとおりです。

java.sql.SQLException: I/O Error: SSO Failed: Native SSPI library not loaded. Check the     java.library.path system property.
    at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:615)
    at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:352)
    at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java:50)
    at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:185)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at Connect.main(Connect.java:14)
Caused by: java.io.IOException: SSO Failed: Native SSPI library not loaded. Check the java.library.path system property.
    at net.sourceforge.jtds.jdbc.TdsCore.sendMSLoginPkt(TdsCore.java:1893)
    at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:588)
    ... 6 more

これが通常発生する理由を読み、同様の質問を見つけましたここ、しかしこれはうまくいかないようです。コードを実行するときに、SSO ファイルを見つけるために次の引数を含めました。

-Djava.library.path=/Tester/jdbc/x64/SSO

そして、これは私のファイルの構造です

**Tester**
   *src*
     default package
         Connect.java
   *JRE System Library*
   *jdbc*
     conf
     html
     IA64
     x64
       SSO
        ntlmauth.dll
     x86

あなたは何か間違っていることを見つけることができますか?

4

6 に答える 6

73

これと同じ問題のようです: jtds-driver-not-working-for-sql-sever-2008r2-and-denali-native-sspi-library-not

JTDS ダウンロード パッケージから適切な ntlmauth.dll ファイルをJRE bin フォルダーにドロップする必要があります。

64 ビット Windows マシンで実行している場合:

  • この 32 ビット DLL:

    ダウンロード >>> jtds-1.3.0-dist.zip >>> x86 >>> SSO >>> ntlmauth.dll

  • この 32 ビット JRE の場所に移動します。

    C:\Program Files (x86)\Java\jre7\bin

  • この 64 ビット DLL:

    ダウンロード >>> jtds-1.3.0-dist.zip >>> x64 >>> SSO >>> ntlmauth.dll

  • この 64 ビット JRE の場所に移動します。

    C:\Program Files\Java\jre7\bin

32 ビット Windows マシンで実行している場合:

  • この 32 ビット DLL:

    ダウンロード >>> jtds-1.3.0-dist.zip >>> x86 >>> SSO >>> ntlmauth.dll

  • この 32 ビット JRE の場所に移動します。

    C:\Program Files\Java\jre7\bin

それでもうまくいかない場合は、メイン メソッドの先頭に次の行を追加してみてください。 System.out.println(java.lang.System.getProperty('java.library.path'));

プログラムで使用されている実際の JRE パスを出力する必要があります。適切な ntlmauth.dll がその JRE の bin フォルダーにあることを確認してください。

注: この方法を使用する場合は、接続のドメイン、ユーザー、またはパスワードのプロパティを設定しないでください。

注: Java クライアント プログラムが Windows 以外のマシンで実行されている場合、ntlmauth.dll メソッドを使用することはできません。これは、JTDS ダウンロード パッケージに含まれているドキュメントからの引用です: ダウンロード >>> jtds-1.3.0-dist.zip >>> README.SSO

リリース 0.9.2 以降、jTDS は、クライアント プログラムを実行しているアカウントの現在のユーザーの Windows 資格情報を使用して、SQL Server (Windows シングル サインオン) にログインできます。

Windows シングル サインオン (SSO) クライアントを使用すると、資格情報を提供しなくても Microsoft SQL Server に接続できます。現在のユーザーの資格情報を動的に読み取り、データベースに接続します。Windows アカウントがデータベースで十分な権限を持っている場合。これは、ネイティブ (Windows 専用) ライブラリである ntlmauth.dll を使用して行われます。

于 2013-05-07T22:17:22.843 に答える