Создать строку подключения jTDS - PullRequest
50 голосов
/ 07 декабря 2009

имя моего сервера 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

Ответы [ 5 ]

110 голосов
/ 07 декабря 2009

Как подробно описано в jTDS Частота задаваемых вопросов , формат URL для jTDS:

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, дважды проверьте, что вы используете SQL Server на порту 1433, что служба запущена и у вас нет брандмауэра, блокирующего входящие соединения.

38 голосов
/ 15 марта 2013

Действительно, действительно, действительно проверьте, включен ли протокол TCP / IP в вашем локальном экземпляре SQLEXPRESS.

Выполните следующие действия, чтобы убедиться:

  • Откройте « Sql Server Configuration Manager » в «Меню Пуск \ Программы \ Microsoft SQL Server 2012 \ Средства настройки \»
  • Развернуть "Конфигурация сети SQL Server"
  • Перейти в «Протоколы для SQLEXPRESS»
  • Включить TCP / IP

Если у вас есть какие-либо проблемы, проверьте эту запись в блоге для получения подробной информации, поскольку она содержит скриншоты и многое другое.

Также проверьте, если служба Windows «Браузер SQL Server» активирована и работает :

  • Перейти в Панель управления -> Администрирование -> Службы
  • Откройте службу «SQL Server Browser» и включите ее (сделайте ее ручной или автоматической, зависит от ваших потребностей)
  • Запустите его.

Вот и все.

После того, как я установил новый локальный SQLExpress, все, что мне нужно было сделать, это включить TCP / IP и запустить службу браузера SQL Server.

Ниже кода, который я использую для проверки локального соединения SQLEXPRESS. Конечно, вы должны изменить IP, имя_базы_данных и имя пользователя / пароль по мере необходимости.

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>
7 голосов
/ 07 декабря 2009

jdbc:jtds:sqlserver://x.x.x.x/database замена x.x.x.x на IP или имя хоста вашего компьютера с SQL Server.

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

(обновил неверную информацию и добавил ссылку на синтаксис экземпляра )

4 голосов
/ 07 декабря 2009

выстрел в темноте, но Судя по вашему сообщению об ошибке, кажется, что либо экземпляр sqlserver не работает на порту 1433, либо что-то блокирует запросы к этому порту

0 голосов
/ 08 мая 2015

SQLServer запускает экземпляр по умолчанию через порт 1433. Если вы укажете порт как порт 1433, SQLServer будет искать только экземпляр по умолчанию. Имя экземпляра по умолчанию было создано при установке и обычно составляет SQLEXPRESSxxx_xx_ENU .

Имя экземпляра также соответствует имени папки, созданной в Program Files -> Microsoft SQL Server. Поэтому, если вы посмотрите туда и увидите одну папку с именем SQLEXPRESSxxx_xx_ENU, это экземпляр по умолчанию.

Папки с именем MSSQL12.myInstanceName (для SQLServer 2012) являются именованными экземплярами в SQL Server и к не доступны через порт 1433.

Так что, если ваша программа обращается к экземпляру по умолчанию в базе данных, укажите порт 1433, и вам может не потребоваться указывать имя экземпляра.

Если ваша программа обращается к именованному экземпляру (не экземпляру по умолчанию) в базе данных НЕ укажите порт, но вы должны указать имя экземпляра.

Надеюсь, это проясняет некоторые из заблуждений, возникающих из-за ошибок выше.

...