2012-07-05 46 views
19

¿Es posible conectarse a un LocalDB de SQL Server utilizando JDBC? It appears that (a partir de diciembre de 2011) no fue posible.Conexión a SQL Server LocalDB utilizando JDBC

¿Conoces una solución o cambio en el estado?

+0

Habe un vistazo al tutorial sobre cómo hacerlo desde IDEs basados ​​en IntelliJ https://blog.jetbrains.com/datagrip/2016/10/07/connecting-datagrip-to-sql-server-express-localdb/ – moscas

Respuesta

14

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

No con el controlador JDBC de Microsoft.

El controlador JDBC jTDS admite canalizaciones con nombre.

Ejecutando 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".

¿Conoces algún problema o cambio de estado?

Posibles soluciones están utilizando controladores JDBC alternativos o cambiando 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 admite canalizaciones con nombre. Una solución posible para sus desarrolladores es descargar e instalar SQL Express, que habilita su soporte TCP/IP ".

Luiz Fernando Santos (MSFT) July 06, 2012

"Desafortunadamente controlador JDBC no soporta LocalDB en este momento y no hay ninguna solución fácil. El equipo es consciente de esta característica que falta, pero la presentación de un elemento de conexión siempre es útil para el seguimiento de DCR y priorización "

Krzysztof Kozielczyk - MSFT 22 Dec 2011

"¿Utiliza SQL Server Express actualidad para el desarrollo local? ¿Estás trabajando en Windows u otra plataforma? Sería muy bueno saber más acerca de cómo le gustaría utilizar LocalDB con su aplicación Java. "

Shamitha Reddy, Program Manager Microsoft JDBC Driver for SQL Server, Microsoft JDBC Driver Product Team 13 Apr 2012

+1

Gracias por tomarse el tiempo para publicar. Le había preguntado a mi DBA esta misma pregunta. A su vez, lo planteó en el foro de MSDN y recibió una respuesta de Luiz Fernando Santos. ¡La misma respuesta que ha citado amablemente! :-) –

+0

Bastante justo. Completé la respuesta con posibles soluciones. –

17

Sí, es posible.

La cadena de conexión para una instancia LocalDB usando jTDS se parece a esto:

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

Esto funciona como de jTDS 1.3.2.Puede descargar una versión aquí:

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

Para encontrar la canalización con nombre para su LocalDB deseada, ejecute

SqlLocalDb info NameOfTheLocalDBInstance 

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

Es probablemente el mejor para conectar 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 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 
+0

Estas son excelentes instrucciones, sin embargo tuve que soltar el nombre de la base de datos de la cadena de conexión (ya que estamos usando la base de datos maestra) y usar mis credenciales de red: jdbc: jtds: sqlserver: //./; instance = LOCALDB # 111111; namedPipe = true; domain = MY_DOMAIN –

+3

Y si CREA BASE DE DATOS SomeDB después de conectar desde sqlcmd, entonces usamos: jdbc: jtds: sqlserver: //./SomeDB; instance = LOCALDB # 111111; namedPipe = true; domain = MY_DOMAIN –

+2

... finalmente, se puede encontrar un JTDS 1.3.2 jar en el zip dist en github: https://github.com/milesibastos/jTDS/releases –

0

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

El estado en la actualidad es: ¡IMPOSIBLE! No es posible construir cadena de conexión a localDB utilizando jTDS debido a sus limitaciones de nombre de tubería. Ver tema abierto aquí: http://sourceforge.net/p/jtds/bugs/716/

Como se mencionó LocalDB ¿no es compatible con otro tipo de conexión, pero NamedPipes, por lo que parece misión imposible hasta ahora ...

rgds

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

+0

Acabo de tener éxito con la respuesta de bonh. Por lo tanto, al menos es posible obtener una conexión. –

+1

El error al que se ha vinculado tiene un parche adjunto que supuestamente soluciona la limitación. – twm

+1

Acabo de probar el parche y funcionó para mí. – twm