Подключение к SQL Server LocalDB с помощью JDBC

Можно ли подключиться к SQL Server LocalDB с помощью JDBC? Это кажется, что (по состоянию на декабрь 2011 г.) это было невозможно.

Знаете ли вы обходной путь или изменение статуса?


person Sri Sankaran    schedule 05.07.2012    source источник
comment
Посмотрите руководство, как это сделать в IDE на базе IntelliJ blog.jetbrains.com/datagrip/2016/10/07/   -  person moscas    schedule 07.12.2017


Ответы (4)


Можно ли подключиться к SQL Server LocalDB с помощью JDBC?

Не с драйвером JDBC от Microsoft.

Драйвер JDBC jTDS поддерживает именованные каналы.

Выполнение SqlLocalDB.exe info MyInstance предоставит вам (вместе с другой информацией) имя канала экземпляра, например «np:\.\pipe\LOCALDB#F365A78E\tsql\query».

Знаете ли вы обходной путь или изменение статуса?

Возможные обходные пути: использование альтернативных драйверов JDBC или переход на SQL Server 2012 Express вместо Локальная БД.

Подробности:

Драйвер Microsoft JDBC несовместим с LocalDB.

«К сожалению, драйвер Microsoft JDBC не поддерживает подключение к LocalDB. Это происходит потому, что LocalDB поддерживает только соединения с именованными каналами, а наша текущая реализация JDBC не поддерживает именованные каналы. Одним из возможных обходных путей для ваших разработчиков является загрузка и установка SQL Express, который и включите его поддержку TCP/IP».

Луис Фернандо Сантос (MSFT), 6 июля 2012 г. < /а>

«К сожалению, на данный момент драйвер JDBC не поддерживает LocalDB, и нет простого обходного пути. Команда знает об этой отсутствующей функции, но регистрация элемента подключения всегда полезна для отслеживания и определения приоритетов DCR».

Кшиштоф Козельчик - MSFT, 22 декабря 2011

«Используете ли вы сегодня SQL Server Express для локальной разработки? Работаете ли вы над Windows или другой платформой? Было бы здорово узнать больше о том, как вы хотели бы использовать LocalDB с вашим приложением Java».

Шамита Редди, руководитель программы Microsoft Драйвер JDBC для SQL Server, Microsoft JDBC Driver Product Team, 13 апреля 2012 г.

person Fernando Correia    schedule 02.03.2013
comment
Спасибо, что нашли время опубликовать. Я задал своему администратору базы данных этот самый вопрос. Он, в свою очередь, разместил его на форуме MSDN и получил ответ от Луиса Фернандо Сантоса. Тот самый ответ, который вы любезно процитировали! :-) - person Sri Sankaran; 02.03.2013
comment
Справедливо. Я дополнил ответ возможными обходными путями. - person Fernando Correia; 03.03.2013

Да, это возможно.

Строка подключения для экземпляра LocalDB с использованием jTDS выглядит следующим образом:

jdbc:jtds:sqlserver://./DatabaseName;instance=LOCALDB#88893A09;namedPipe=true

Это работает с jTDS 1.3.2. Скачать релиз можно здесь:

https://github.com/milesibastos/jTDS/releases/download/v1.3.2/jtds-1.3.2-dist.zip

Чтобы найти именованный канал для нужной локальной базы данных, запустите

SqlLocalDb info NameOfTheLocalDBInstance

что даст вам что-то вроде np:\\.\pipe\LOCALDB#88893A09\tsql\query

Вероятно, лучше всего подключиться с определенным именем пользователя/паролем, поэтому создайте логин и пользователя для вашей базы данных в этом экземпляре LocalDB (если вы еще этого не сделали):

sqlcmd -S np:\\.\pipe\LOCALDB#88893A09\tsql\query

CREATE LOGIN dbuser WITH PASSWORD = 'dbpassword'
GO
CREATE USER dbuser
GO
ALTER AUTHORIZATION ON DATABASE::DatabaseName TO dbuser
GO
person bonh    schedule 25.06.2014
comment
Это отличные инструкции, однако мне пришлось удалить имя базы данных из строки подключения (поскольку мы используем основную базу данных) и вместо этого использовать свои сетевые учетные данные: jdbc:jtds:sqlserver://./;instance=LOCALDB#111111 ;namedPipe=true;домен=MY_DOMAIN - person Ali Cheaito; 21.09.2015
comment
А если мы СОЗДАЕМ БАЗУ ДАННЫХ SomeDB после подключения из sqlcmd, то используем: jdbc:jtds:sqlserver://./SomeDB;instance=LOCALDB#111111;namedPipe=true;domain=MY_DOMAIN - person Ali Cheaito; 21.09.2015
comment
... наконец, jar JTDS 1.3.2 можно найти в dist zip на github: github.com /milesibastos/jTDS/релизы - person Ali Cheaito; 21.09.2015
comment
Что изменилось с момента этого ответа и версии jTDS 1.3.2, что сегодня я не могу подключиться с помощью этого метода? - person ajeh; 31.05.2018

Сегодня я провел исследование, чтобы настроить соединение с использованием jTDS и именованных каналов.

Состояние на сегодняшний день: НЕВОЗМОЖНО! Невозможно создать строку подключения к локальной базе данных с помощью jTDS из-за ограничений имени канала. См. открытый вопрос здесь: http://sourceforge.net/p/jtds/bugs/716/

Как уже упоминалось, localDB не поддерживает другое соединение, кроме namedPipes, поэтому пока это выглядит как невозможная миссия...

с уважением

Редактировать: Как упоминалось в комментарии, в проблеме, указанной выше, есть исправление, и вы можете использовать его для решения проблемы. Извините, я не могу проверить это на себе.

person Saram    schedule 02.07.2014
comment
Я только что добился успеха с ответом Бонха. Так что по крайней мере есть возможность установить связь. - person Wisco crew; 19.08.2015
comment
К ошибке, на которую вы ссылаетесь, прикреплен патч, который якобы устраняет ограничение. - person twm; 14.12.2015
comment
Люди используют неофициальный форк jTDS для обхода этой ошибки. К сожалению, последняя официальная версия jTDS — 1.6.1 (датированная 2013 годом), что означает, что она не поддерживается. - person Diego Queiroz; 04.09.2017

Чтобы узнать LocalDb и экземпляр:

  1. Щелкните правой кнопкой мыши LocalDb в проводнике объектов.
  2. Выберите свойства
  3. нажмите на просмотр свойств подключения
  4. вы получите всю информацию о деталях локального и веб-сервера
person Rahul Bhalekar    schedule 08.09.2018