61

SQLサーバーのインスタンス名はMYPC\SQLEXPRESSで、データベース「ブログ」に接続するための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
4

5 に答える 5

122

jTDS Frequenlty Asked Questionsで詳しく説明されているように、jTDSのURL形式は次のとおりです。

jdbc:jtds:<server_type>://<server>[:<port>][/<database>][;<property>=<value>[;...]]

したがって、で実行されているMS SQL Serverによってホストされている「ブログ」と呼ばれるデータベースに接続するにはMYPC、次のようになります。

jdbc:jtds:sqlserver://MYPC:1433/Blog;instance=SQLEXPRESS;user=sa;password=s3cr3t

または、使用したい場合getConnection(url, "sa", "s3cr3t")

jdbc:jtds:sqlserver://MYPC:1433/Blog;instance=SQLEXPRESS

編集:エラーに関してConnection refusedは、ポート1433でSQL Serverを実行していること、サービスが実行されていること、着信接続をブロックするファイアウォールがないことを再確認してください。

于 2009-12-07T20:01:22.680 に答える
43

本当に、本当に、ローカルの SQLEXPRESS インスタンスで TCP/IP プロトコルが有効になっているかどうかを確認してください。

次の手順に従って、次のことを確認してください。

  • 「スタート メニュー\プログラム\Microsoft SQL Server 2012\Configuration Tools\」にある「Sql Server Configuration Manager 」を開きます。
  • 「SQL Server ネットワーク構成」を展開します
  • 「SQLEXPRESSのプロトコル」に入ります
  • TCP/IP を有効にする

問題が発生した場合は、このブログ投稿で詳細を確認してください。スクリーンショットやその他の情報が含まれています。

また、「SQL Server Browser」Windows サービスがアクティブ化され、実行されているかどうかを確認します。

  • [コントロール パネル] -> [管理ツール] -> [サービス] に移動します。
  • 「SQL Server Browser」サービスを開き、有効にします(必要に応じて手動または自動にします)
  • 始めよう。

それでおしまい。

新しいローカル 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>
于 2013-03-15T12:40:07.677 に答える
9

jdbc:jtds:sqlserver://x.x.x.x/databasex.x.x.xSQL 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

(誤った情報を更新し、インスタンス構文への参照を追加)

于 2009-12-07T19:29:46.927 に答える
4

暗闇の中でのショットですが、エラーメッセージの外観から、sqlserverインスタンスがポート1433で実行されていないか、何かがそのポートへの要求をブロックしているようです。

于 2009-12-07T20:05:10.583 に答える
-1

SQLServer は、ポート 1433 で既定のインスタンスを実行します。ポートをポート 1433 として指定すると、SQLServer は既定のインスタンスのみを検索します。既定のインスタンスの名前はセットアップ時に作成され、通常はSQLEXPRESSxxx_xx_ENUです。

インスタンス名は、Program Files -> Microsoft SQL Server で作成されたフォルダー名にも一致します。したがって、そこを見て、SQLEXPRESSxxx_xx_ENU という名前のフォルダーが 1 つある場合、それが既定のインスタンスです。

MSSQL12.myInstanceName (SQLServer 2012 の場合)という名前のフォルダーは、SQL Server の名前付きインスタンスであり、ポート 1433 経由ではアクセスされません。

したがって、プログラムがデータベース内の既定のインスタンスにアクセスしている場合は、ポート 1433 を指定します。インスタンス名を指定する必要はありません。

プログラムがデータベース内の名前付きインスタンス (既定のインスタンスではない) にアクセスしている場合は、ポートを指定しないでください。インスタンス名を指定する必要があります

これにより、上記のエラーから生じる混乱の一部が明確になることを願っています。

于 2015-05-07T21:44:42.870 に答える