Помогите мне создать строку соединения jTDS - программирование
Подтвердить что ты не робот

Помогите мне создать строку соединения jTDS

мое имя экземпляра сервера 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
4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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

Также проверьте, активирована ли служба Windows Server Browser и работает:

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

Что это.

После установки нового локального 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>

Ответ 3

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

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

Ответ 5

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

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

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

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

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

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