Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Детали:

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

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

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

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

Krzysztof Kozielczyk - MSFT 22 декабря 2011 года

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

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

Ответ 2

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

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

Ответ 3

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

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

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

Rgds

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