0

jTDS JDBC ドライバーを使用した次のコードに問題があります。すべてが機能し、クエリも問題ありません。ただし、接続に失敗してもエラー/例外は発生しません。偽の IP の入力、ローカル ネットワーク接続の無効化、偽のポート番号の提供などを試みましたが、うまくいきませんでした。接続がいつ失敗したかを知る必要があります。

「con = java.sql.DriverManager.getConnection(url, id, pass);」という行ですべてが停止しているようです。(ただし、本当に例外をスローする必要がある場合のみ...)

import java.sql.SQLException;

public class Main {

    public static void main(String[] args) throws ClassNotFoundException, SQLException {


    java.sql.Connection con = null;


    String url= "jdbc:jtds:sqlserver://x.x.x.x/DATABASE";
    String id= "seret";
    String pass = "secret";

    Class.forName("net.sourceforge.jtds.jdbc.Driver");


    System.out.println("Connecting to database...");

    con = java.sql.DriverManager.getConnection(url, id, pass);

    System.out.println("Connected?")
    //Program never gets here, but does not close either.

    if(con.isValid(1000)) System.out.println("Does not work either...");

    if(con!=null) con.close();      

    }

}
4

1 に答える 1

0

例外が発生しない理由がわかりません。jTDS 1.2.4 で SQL Server 2008 および SQL Server 2000 を使用すると、SQLException (SQLState=S1000) が発生します。

jTDS ドライバーをアップグレードしても解決しない場合は、URL 文字列に「;loginTimeout=20」を追加してみてください。したがって、次のようになります。

String url= "jdbc:jtds:sqlserver://x.x.x.x/DATABASE;loginTimeout=20";

次に、アプリケーションを再実行して、少なくとも 20 秒待ちます。うまくいけば、タイムアウト例外が発生します。

loginTimeout 設定が役に立たなかった場合は、socketTimeout 設定で遊ぶこともできます。ただし、socketTimeout を使用した場合の影響については、jTDS FAQ を参照してください。基本的に、アプリケーションが実行すると予想される最長のクエリよりも長く設定する必要があります。

于 2012-02-20T15:32:55.693 に答える