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

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

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

4 ответа

Решение

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

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

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

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

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

Возможные обходные пути - использование альтернативных драйверов JDBC или переключение на SQL Server 2012 Express вместо LocalDB.

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

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

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

Луис Фернандо Сантос (MSFT) 06 июля 2012 г.

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

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

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

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

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

Строка подключения для экземпляра 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

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

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

Знать LocalDb & Instance:

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

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

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

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

Rgds

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

Другие вопросы по тегам