Помогите мне создать строку соединения 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
Ответы
Ответ 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, и вам может не потребоваться указать имя экземпляра.
Если ваша программа обращается к именованному экземпляру (а не экземпляру по умолчанию) в базе данных НЕ НЕТ, укажите порт, но вы должны указать имя экземпляра.
Надеюсь, это объяснит некоторую путаницу, проистекающую из вышеперечисленных ошибок.