Conexión a SQL Server LocalDB utilizando JDBC

¿Es posible conectarse a un LocalDB de SQL Server usando JDBC? Parece que (a partir de diciembre de 2011) no fue posible.

¿Conoce una solución alternativa o un cambio de estado?

¿Es posible conectarse a un LocalDB de SQL Server usando JDBC?

No con el controlador JDBC de Microsoft.

El controlador JTDS JDBC admite canalizaciones con nombre.

Ejecutar información SqlLocalDB.exe MyInstance le proporcionará (junto con otra información) el nombre de la instancia del canal como “np: \. \ Pipe \ LOCALDB # F365A78E \ tsql \ query”.

¿Conoce una solución alternativa o un cambio de estado?

Posibles soluciones alternativas son el uso de controladores JDBC alternativos o el cambio a SQL Server 2012 Express en lugar de LocalDB.

Detalles:

El controlador JDBC de Microsoft no es compatible con LocalDB.

“Desafortunadamente, el controlador JDBC de Microsoft no admite la conexión a LocalDB. Esto sucede porque LocalDB solo admite conexiones de Canalizaciones con nombre y nuestra implementación JDBC actual no es compatible con Canalizaciones con nombre. Una solución posible para sus desarrolladores es descargar e instalar SQL Express, que y habilite su soporte TCP / IP “.

Luiz Fernando Santos (MSFT) 06 de julio de 2012

“Lamentablemente, el controlador JDBC no es compatible con LocalDB en este momento y no hay una solución fácil. El equipo conoce esta característica que falta, pero archivar un elemento de conexión siempre es útil para el seguimiento y la priorización de DCR”.

Krzysztof Kozielczyk – MSFT 22 de diciembre de 2011

“¿Utiliza SQL Server Express hoy para el desarrollo local? ¿Está trabajando en Windows u otra plataforma? Sería genial escuchar más acerca de cómo le gustaría usar LocalDB con su aplicación Java”.

Shamitha Reddy, Gerente de progtwig Controlador JDBC de Microsoft para SQL Server, Equipo de producto de controlador JDBC de Microsoft 13 de abril de 2012

Sí, es posible.

La cadena de conexión para una instancia de LocalDB usando jTDS se ve así:

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

Esto funciona a partir de jTDS 1.3.2. Puedes descargar un lanzamiento aquí:

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

Para encontrar el conducto con nombre para su LocalDB deseado, ejecute

 SqlLocalDb info NameOfTheLocalDBInstance 

que le dará algo como np:\\.\pipe\LOCALDB#88893A09\tsql\query

Probablemente sea mejor conectarse con un nombre de usuario / contraseña específico, así que cree también un inicio de sesión y un usuario para su base de datos en esa instancia de LocalDB (si aún no lo hizo):

 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 

Hice mi investigación hoy para configurar la conexión utilizando jTDS y tuberías con nombre.

El estado actual es: ¡IMPOSIBLE! No es posible construir cadena de conexión a localDB usando jTDS debido a sus limitaciones de nombre de tubería. Vea el problema abierto aquí: http://sourceforge.net/p/jtds/bugs/716/

Como se mencionó, localDB no admite otras conexiones sino namedPipes, por lo que parece que la misión es imposible hasta el momento …

rgds

Editar: Como se menciona en el comentario, hay un problema de parche vinculado anteriormente y puede usarlo para solucionar el problema. Lo siento, no puedo verificar esto por mi cuenta.