2012-07-05 6 views

Odpowiedz

14

Czy można połączyć się z SQL Server LocalDB przy użyciu JDBC?

Nie ze sterownikiem JDBC firmy Microsoft.

Sterownik JDBC jTDS obsługuje nazwane potoki.

Wykonywanie informacji SqlLocalDB.exe MyInstance dostarcza (wraz z innymi informacjami) nazwę potoku instancji, na przykład "np: \. \ Pipe \ LOCALDB # F365A78E \ tsql \ query".

Czy znasz sposób rozwiązania problemu lub zmianę statusu?

Możliwe rozwiązania alternatywne JDBC przy użyciu alternatywnych lub przełączanie na SQL Server 2012 Express zamiast LocalDB.

Szczegóły:

sterownik Microsoft JDBC nie jest kompatybilny z LocalDB.

"Niestety, sterownik JDBC firmy Microsoft nie obsługuje łączenia z LocalDB, ponieważ LocalDB obsługuje tylko połączenia z potokami nazwanymi, a nasza obecna implementacja JDBC nie obsługuje nazwanych potoków Jednym z możliwych zadań dla programistów jest pobranie i zainstalowanie SQL Express, który umożliwia obsługę TCP/IP. "

Luiz Fernando Santos (MSFT) July 06, 2012

„Niestety sterownik JDBC nie obsługuje LocalDB w tej chwili i nie jest łatwo obejść. Zespół jest świadomy tego brakujących funkcji, ale złożenie connect przedmiot jest zawsze pomocny DCR śledzenia i priorytetów . "

Krzysztof Kozielczyk - MSFT 22 Dec 2011

„Używasz SQL Server Express dzisiaj dla rozwoju lokalnego? Czy działa na systemie Windows lub inną platformę? Byłoby wspaniale, aby dowiedzieć się więcej o tym, jak chcesz używać LocalDB z aplikacji Java. "

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

+1

Dzięki za poświęcenie czasu na opublikowanie. Poprosiłem moje DBA o to pytanie. On z kolei postawił go na forum MSDN i otrzymał odpowiedź od Luiza Fernando Santosa. Ta sama odpowiedź, którą uprzejmie zacytowałeś! :-) –

+0

Wystarczająco fair. Uzupełniłem odpowiedź możliwymi obejściami. –

17

Tak, jest to możliwe.

Ciąg połączenia dla instancji LocalDB wykorzystaniem jTDS wygląda następująco:

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

Działa to jak z jTDS 1.3.2.Możesz pobrać wydanie tutaj:

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

aby znaleźć nazwie rurę do żądanej LocalDB uruchom

SqlLocalDb info NameOfTheLocalDBInstance 

który daje coś takiego np:\\.\pipe\LOCALDB#88893A09\tsql\query

to chyba najlepiej łączyć z konkretną nazwę użytkownika/hasło, aby utworzyć login i użytkownika do bazy danych, w tym przypadku LocalDB jak również (jeśli jeszcze go nie masz):

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

To są świetne instrukcje, jednak musiałem usunąć nazwę bazy danych z ciągu połączenia (ponieważ używamy głównej bazy danych) i zamiast tego używać moich poświadczeń sieciowych: jdbc: jtds: sqlserver: //./; instance = LOCALDB # 111111; namedPipe = true; domain = my_domain –

+3

A jeśli CREATE DATABASE SomeDB po podłączeniu z sqlcmd, a następnie używamy: jDBC jtds: SQLServer: //./SomeDB; instancja = LOCALDB # 111111; namedPipe = true; domain = my_domain –

+2

... wreszcie, JTDS 1.3.2 jar można znaleźć w archiwum ZIP na github: https://github.com/milesibastos/jTDS/releases –

0

zrobiłem moje badania dzisiaj do konfiguracji połączenia z użyciem jTDS i nazwanych potoków.

Stan na dziś to: niemożliwe! Nie można zbudować połączenia ciąg do localDB przy użyciu jTDS ze względu na ograniczenia nazwy rury. Zobacz otwartego problem tutaj: http://sourceforge.net/p/jtds/bugs/716/

Jak wspomniano localDB nie obsługuje inne połączenia, ale namedPipes, więc wygląda na to misji niemożliwe tej pory ...

rgds

Edit: Jak wspomniano w komentarzu znajduje się łatka, której dotyczy problem, i możesz jej użyć, aby rozwiązać problem. Przepraszam, nie mogę tego sprawdzić samemu.

+0

Po prostu odniosłem sukces z odpowiedzią bonh. Więc przynajmniej można uzyskać połączenie. –

+1

Błąd, z którym się łączysz, ma dołączoną poprawkę, która rzekomo naprawia ograniczenie. – twm

+1

Właśnie wypróbowałem łatkę i zadziałało to dla mnie. – twm