5

現在、次の接続文字列を使用してデータベースに接続しています (データベースは ServerIP と同じサーバー上にあります)。

String constr = "Data Source=ServerIP,1433;Network Library=DBMSSOCN;Initial 
Catalog=dbName;User ID=dbUserID;Password=dbUserPassword";

これは、asp.net で使用すると正常に接続されます。(手動で dbUserId を作成し、SQL サーバー管理スタジオから dbUserPassword を割り当てました。dbUserId はデータベース「dbName」の所有者です)

同じデータベースに接続する必要がある別の PC に Java Swing アプリケーションがあります。C: にある sqljdbc4.jar を使用しています。私のクラスパスには「.;C:\sqljdbc4.jar」というエントリがあります。接続を実現するために、次のコード行を使用しています。

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

 String url = "jdbc:sqlserver://ServerIP:1433;databaseName=dbName";

   String user = "dbUserID";
   String pass = "dbUserPassword";
   Connection connection = DriverManager.getConnection(url, user, pass); 

ただし、「Connection connection =DriverManager.getConnection(url, user, pass);」という行で例外が発生します。: "ホスト "ServerIP"、ポート 1433 への TCP/IP 接続に失敗しました。エラー: "接続がタイムアウトしました。接続プロパティを確認します。SQL Server のインスタンスがホスト上で実行されており、ポートで TCP/IP 接続を受け入れていることを確認してください。ポートへの TCP 接続がファイアウォールによってブロックされていないことを確認してください。」

Windowsファイアウォールがオフになっていることを確認しました(また、ホームネットワークとパブリックネットワークの両方でMSSQLSERVERポート1433 tcpの例外が追加されています)。SQL Server Management Studio から、SQL Server と SQL Server Express の両方で TCP/IP を有効にしました。

接続文字列またはSQLサーバーの接続設定に問題がある可能性があることを誰かに教えてもらえますか?

4

2 に答える 2

3

最後に根本原因を突き止めました。問題は、Java 接続文字列、IP アドレス、またはポートにはありませんでした。ネットワークと一緒でした。serverIP と、Java アプリケーションを実行しているマシンの IP は、異なるサブネット上にありました。したがって、これら 2 つのサブネット間のスイッチング メカニズムは、ポート 1433 でトラフィックをブロックしていました。サブネットワーク)

これが、将来同様のことを達成しようとしている人にとって役立つことを願っています。

于 2013-06-01T13:36:38.440 に答える
0

で試しましたかjtds.jar。私はそれが私のために働いている以下を使用しています。

  public static String jdbc_url="jdbc:jtds:sqlserver://yourServerIp:1433/dbName";
  public static String jdbc_username="sa"; 
  public static  String jdbc_password="prabhakar";
  public static String jdbc_driver="net.sourceforge.jtds.jdbc.Driver"; 
  Class.forName(jdbc_driver);
  Connection cn=null;    
  cn=DriverManager.getConnection(jdbc_url, jdbc_username,jdbc_password);
于 2013-05-31T09:01:05.597 に答える