2012-07-05 33 views
19

È possibile connettersi a un LocalDB di SQL Server utilizzando JDBC? It appears that (a partire da dic 2011) non è stato possibile.Connessione a SQL Server LocalDB tramite JDBC

Sei a conoscenza di una soluzione alternativa o di un cambio di stato?

+0

Habe un'occhiata al tutorial come farlo dagli IDE basati su IntelliJ https://blog.jetbrains.com/datagrip/2016/10/07/connecting-datagrip-to-sql-server-express-localdb/ – moscas

risposta

14

È possibile connettersi a un SQL Server LocalDB utilizzando JDBC?

Non con il driver JDBC di Microsoft.

Il driver JDBC jTDS supporta pipe denominate.

Esecuzione di informazioni SqlLocalDB.exe MyInstance consente di ottenere (insieme ad altre informazioni) il nome della pipe dell'istanza come "np: \. \ Pipe \ LOCALDB # F365A78E \ tsql \ query".

Sei a conoscenza di una soluzione alternativa o di un cambio di stato?

Possibili soluzioni alternative utilizzano driver JDBC alternativi o passaggio a SQL Server 2012 Express anziché LocalDB.

Dettagli:

Il driver JDBC Microsoft non è compatibile con LocalDB.

"Purtroppo, il Driver Microsoft JDBC non supporta la connessione a LocalDB. Questo accade perché LocalDB supporta solo connessioni Named Pipe e la nostra implementazione JDBC corrente non supporta named pipe. Una possibile lavoro in giro per gli sviluppatori è quello di scaricare e installare SQL Express, che abilita il suo supporto TCP/IP. "

Luiz Fernando Santos (MSFT) July 06, 2012

"Purtroppo driver JDBC non supporta LocalDB in questo momento e non v'è alcuna soluzione facile. La squadra è consapevole di questa caratteristica mancante, ma il deposito di un elemento di connessione è sempre utile per il monitoraggio e la prioritizzazione DCR ".

Krzysztof Kozielczyk - MSFT 22 Dec 2011

"Usi SQL Server Express oggi per lo sviluppo locale? Sei a lavorare su Windows o un'altra piattaforma? Sarebbe bello sentire di più su come si desidera utilizzare LocalDB con la tua applicazione Java. "

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

+1

Grazie per aver trovato il tempo di postare. Avevo chiesto al mio DBA questa stessa domanda. A sua volta lo ha posato sul forum MSDN e ottenuto una risposta da Luiz Fernando Santos. La stessa risposta che hai gentilmente citato! :-) –

+0

Abbastanza giusto. Ho completato la risposta con possibili soluzioni alternative. –

17

Sì, è possibile.

La stringa di connessione per un'istanza LocalDB utilizzando jTDS assomiglia a questo:

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

Questo funziona come di jTDS 1.3.2.È possibile scaricare una versione qui:

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

Per trovare la named pipe per il vostro LocalDB desiderato, eseguire

SqlLocalDb info NameOfTheLocalDBInstance 

che vi darà qualcosa di simile np:\\.\pipe\LOCALDB#88893A09\tsql\query

Probabilmente la cosa migliore per la connessione con un nome utente/password specifici, quindi crea un login e un utente per il tuo database anche in quell'istanza LocalDB (se non lo hai già fatto):

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

Queste sono ottime istruzioni, tuttavia ho dovuto eliminare il nome del database dalla stringa di connessione (poiché stiamo utilizzando il database master) e utilizzare invece le credenziali di rete: jdbc: jtds: sqlserver: //./; instance = LOCALDB # 111111; namedPipe = true; domain = MY_DOMAIN –

+3

E se CREATE DATABASE SomeDB dopo la connessione da sqlcmd, usiamo: jdbc: jtds: sqlserver: //./SomeDB; instance = LOCALDB # 111111; namedPipe = true; domain = MY_DOMAIN –

+2

... infine, un jar JTDS 1.3.2 può essere trovato in dist zip su github: https://github.com/milesibastos/jTDS/releases –

0

Ho effettuato la mia ricerca oggi per impostare la connessione utilizzando jTDS e named pipe.

Lo stato oggi è: IMPOSSIBILE! Non è possibile costruire la stringa di connessione su localDB utilizzando jTDS a causa delle limitazioni del nome del pipe. Vedere questione aperta qui: http://sourceforge.net/p/jtds/bugs/716/

Come accennato LocalDB non supportato altro collegamento ma NamedPipes, così sembra che missione impossibile finora ...

rgds

Edit: Come accennato nel commento c'è una patch in questione collegata sopra e puoi usarla per risolvere il problema. Scusa, non posso controllarlo da solo.

+0

Ho appena avuto successo con la risposta di bonh. Quindi è almeno possibile ottenere una connessione. –

+1

Il bug a cui è collegato ha una patch collegata che presumibilmente corregge la limitazione. – twm

+1

Ho appena provato la patch e ha funzionato per me. – twm

Problemi correlati