Подключение к 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-приложением".
Да, это возможно.
Строка подключения для экземпляра 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:
- Щелкните правой кнопкой мыши на LocalDb в обозревателе объектов
- Выберите Свойства
- нажмите на просмотр свойств подключения
- Вы получите всю информацию о локальных и веб-серверах
Я провел свое исследование сегодня, чтобы установить соединение, используя jTDS и именованные каналы.
Состояние на сегодня: НЕВОЗМОЖНО! Невозможно построить строку подключения к localDB с использованием jTDS из-за ограничений имени канала. Смотрите открытый выпуск здесь: http://sourceforge.net/p/jtds/bugs/716/
Как уже упоминалось, localDB не поддерживает другое соединение, кроме namedPipes, так что пока это выглядит как невыполнимая миссия...
Rgds
Изменить: Как уже упоминалось в комментарии, есть патч в выпуске, связанный выше, и вы можете использовать его для устранения проблемы. Извините, я не могу проверить это для себя.