私のSQLサーバーインスタンス名はMYPC\SQLEXPRESSであり、データベース「Blog」に接続するためにjTDS接続文字列を作成しようとしています。誰でも私がそれを達成するのを手伝ってもらえますか?
私はこのようにしようとしています:
DriverManager.getConnection("jdbc:jtds:sqlserver://127.0.0.1:1433/Blog", "user", "password");
私はこれを取得します:
Java.sql.SQLException: Network error IOException: Connection refused: connect
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.Java:395)
at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.Java:50)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.Java:184)
at Java.sql.DriverManager.getConnection(Unknown Source)
at Java.sql.DriverManager.getConnection(Unknown Source)
at SqlConnection.Connect(SqlConnection.Java:19)
at main.main(main.Java:11)
Caused by: Java.net.ConnectException: Connection refused: connect
at Java.net.PlainSocketImpl.socketConnect(Native Method)
at Java.net.PlainSocketImpl.doConnect(Unknown Source)
at Java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at Java.net.PlainSocketImpl.connect(Unknown Source)
at Java.net.SocksSocketImpl.connect(Unknown Source)
at Java.net.Socket.connect(Unknown Source)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at Java.lang.reflect.Method.invoke(Unknown Source)
at net.sourceforge.jtds.jdbc.SharedSocket.createSocketForJDBC3(SharedSocket.Java:305)
at net.sourceforge.jtds.jdbc.SharedSocket.<init>(SharedSocket.Java:255)
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.Java:323)
... 6 more
JTDS Frequenlty Asked Questions で詳しく説明されているように、jTDSのURL形式は次のとおりです。
_jdbc:jtds:<server_type>://<server>[:<port>][/<database>][;<property>=<value>[;...]]
_
したがって、MYPC
で実行されているMS SQL Serverによってホストされている「Blog」というデータベースに接続するには、次のようになります。
_jdbc:jtds:sqlserver://MYPC:1433/Blog;instance=SQLEXPRESS;user=sa;password=s3cr3t
_
または、getConnection(url, "sa", "s3cr3t")
を使用する場合:
_jdbc:jtds:sqlserver://MYPC:1433/Blog;instance=SQLEXPRESS
_
EDIT:_Connection refused
_エラーに関して、ポート1433でSQL Serverを実行していること、サービスが実行されていること、および着信接続をブロックするファイアウォールがありません。
実際、ローカルのSQLEXPRESSインスタンスでTCP/IPプロトコルが有効になっているかどうかを実際に確認してください。
以下を確認してください:
問題がある場合は、スクリーンショットやその他の情報が含まれているため、詳細について このブログ投稿 を確認してください。
また、「SQL Server Browser」Windowsサービスがアクティブで実行されているかどうかを確認します:
それでおしまい。
新しいローカルSQLExpressをインストールしたら、TCP/IPを有効にしてSQL Server Browserサービスを開始するだけで済みました。
SQLEXPRESSローカル接続のテストに使用するコードの下。もちろん、必要に応じてIP、DatabaseName、およびユーザー/パスワードを変更する必要があります。
import Java.sql.Connection;
import Java.sql.DatabaseMetaData;
import Java.sql.DriverManager;
import Java.sql.ResultSet;
import Java.sql.SQLException;
public class JtdsSqlExpressInstanceConnect {
public static void main(String[] args) throws SQLException {
Connection conn = null;
ResultSet rs = null;
String url = "jdbc:jtds:sqlserver://127.0.0.1;instance=SQLEXPRESS;DatabaseName=master";
String driver = "net.sourceforge.jtds.jdbc.Driver";
String userName = "user";
String password = "password";
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, userName, password);
System.out.println("Connected to the database!!! Getting table list...");
DatabaseMetaData dbm = conn.getMetaData();
rs = dbm.getTables(null, null, "%", new String[] { "TABLE" });
while (rs.next()) { System.out.println(rs.getString("TABLE_NAME")); }
} catch (Exception e) {
e.printStackTrace();
} finally {
conn.close();
rs.close();
}
}
}
また、Mavenを使用する場合、pom.xmlにこれを追加します。
<dependency>
<groupId>net.sourceforge.jtds</groupId>
<artifactId>jtds</artifactId>
<version>1.2.4</version>
</dependency>
jdbc:jtds:sqlserver://x.x.x.x/database
置換x.x.x.x
SQL ServerマシンのIPまたはホスト名。
jdbc:jtds:sqlserver://MYPC/Blog;instance=SQLEXPRESS
または
jdbc:jtds:sqlserver://MYPC:1433/Blog;instance=SQLEXPRESS
接続オブジェクトに対して個別にではなく、接続文字列でもユーザー名とパスワードを設定する場合:
jdbc:jtds:sqlserver://MYPC/Blog;instance=SQLEXPRESS;user=foo;password=bar
(間違った情報を更新し、 インスタンス構文 への参照を追加しました)
暗闇の中でのショットですが、エラーメッセージの外観から、sqlserverインスタンスがポート1433で実行されていないか、何かがそのポートへのリクエストをブロックしているようです