2009-07-02 2 views
1

Gibt es einen JDBC-Treiber für SQL Server, der nach Datenbankinstanzen im Netzwerk suchen kann?Gibt es einen JDBC-Treiber für SQL Server, der nach Datenbankinstanzen im Netzwerk suchen kann?

Ich wollte nur "OSQL -L" vom JDBC-Treiber emulieren. Ich möchte OSQL nicht von JNI oder so aufrufen. Ich möchte auch nicht meinen eigenen Code zum Scannen eines UDP-Ports schreiben müssen.

Ich möchte, dass meine Java-Anwendung in der Lage ist, nach Live-SQL-Servern zu suchen und eine Liste mit verfügbaren Servern abzurufen. Ist das nicht eine vernünftige Erwartung für einen JDBC-Treiber? OSQL.exe kann es tun und warum nicht der JDBC-Treiber?

+0

Ich habe auch versucht, auf dem JTDS-Treiberforum zu veröffentlichen, fragend darüber: http://sourceforge.net/forum/message.php?msg_id=7476984 – djangofan

+0

Ich möchte nur TCP-Port 1433 suchen. Ich brauche nicht zu suchen für Instanzen auf anderen Protokollen. – djangofan

Antwort

1

Die JDBC API bietet keine Möglichkeiten dafür. Am besten ist es, auf Java-Socket-Programmierung auf niedriger Ebene zurückzugreifen und zu testen, ob TCP-Port 1433 geöffnet ist oder nicht, und dann zu versuchen, eine Verbindung herzustellen.

Socket socket = null; 
try { 
    socket = new Socket("localhost", 1433); 
    System.out.println("Service is available!"); 
} catch (Exception e) { 
    System.out.println("Service is not available."); 
} finally { 
    if (socket != null) try { socket.close(); } catch (IOException logOrIgnore) {} 
} 

bestätigt einmal, dass der Dienst verfügbar ist, dann können Sie es auf die übliche Weise ohne Datenbanknamen in URL verbinden und eine Liste der verfügbaren Kataloge (Datenbanken) von DatabaseMetaData#getCatalogs() erhalten.

0

Osql ist eigentlich ziemlich dumm, wenn es darum geht, SQL Server-Instanzen zu finden.

Die gleiche Technik wird von SSMS, Enterprise Manager usw. verwendet und es ist unzuverlässig, wenn Ihre SQL-Boxen nicht alle im selben Raum sind (Ok, leicht übertrieben) mit Standardinstanzen.

Was Sie tun könnten, ist rollen Sie Ihre eigenen basierend auf dem Quellcode here from SQLPing1.1 and SQLPing.Net ... die ich zuvor verwendet, um gute Wirkung.

Verwandte Themen