Aiutami a creare una stringa di connessione jTDS

il mio nome di istanza del server sql è MYPC \ SQLEXPRESS e sto provando a creare una stringa di connessione jTDS per connettersi al database “Blog”. Qualcuno può aiutarmi a farlo?

Sto cercando di fare così:

DriverManager.getConnection("jdbc:jtds:sqlserver://127.0.0.1:1433/Blog", "user", "password"); 

e ho capito:

  java.sql.SQLException: Network error IOException: Connection refused: connect at net.sourceforge.jtds.jdbc.ConnectionJDBC2.(ConnectionJDBC2.java:395) at net.sourceforge.jtds.jdbc.ConnectionJDBC3.(ConnectionJDBC3.java:50) at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:184) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at SqlConnection.Connect(SqlConnection.java:19) at main.main(main.java:11) Caused by: java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(Unknown Source) at java.net.PlainSocketImpl.connectToAddress(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at net.sourceforge.jtds.jdbc.SharedSocket.createSocketForJDBC3(SharedSocket.java:305) at net.sourceforge.jtds.jdbc.SharedSocket.(SharedSocket.java:255) at net.sourceforge.jtds.jdbc.ConnectionJDBC2.(ConnectionJDBC2.java:323) ... 6 more 

    Come descritto nelle domande frequenti su jTDS , il formato dell’URL per jTDS è:

     jdbc:jtds:://[:][/][;=[;...]] 

    Quindi, per connettersi a un database chiamato “Blog” ospitato da un MS SQL Server in esecuzione su MYPC , si potrebbe finire con qualcosa di simile a questo:

     jdbc:jtds:sqlserver://MYPC:1433/Blog;instance=SQLEXPRESS;user=sa;password=s3cr3t 

    Oppure, se preferisci usare getConnection(url, "sa", "s3cr3t") :

     jdbc:jtds:sqlserver://MYPC:1433/Blog;instance=SQLEXPRESS 

    EDIT: per quanto riguarda l’errore di Connection refused , ricontrolla che stai eseguendo SQL Server sulla porta 1433, che il servizio è in esecuzione e che non hai un firewall che blocca le connessioni in entrata.

    Davvero, davvero, davvero controllare se il protocollo TCP / IP è abilitato nell’istanza locale SQLEXPRESS.

    Attenersi alla seguente procedura per accertarsi che:

    • Aprire ” Gestione configurazione server Sql ” in “Menu Start \ Programmi \ Microsoft SQL Server 2012 \ Strumenti di configurazione \”
    • Espandi “Configurazione della rete SQL Server”
    • Andare in “Protocolli per SQLEXPRESS”
    • Abilita TCP / IP

    Se hai qualche problema, controlla questo post del blog per i dettagli, in quanto contiene screenshot e molte più informazioni.

    Controllare anche se il servizio Windows “Browser SQL Server” è triggersto e in esecuzione :

    • Vai a Pannello di controllo -> Strumenti di amministrazione -> Servizi
    • Aprire il servizio “SQL Server Browser” e abilitarlo (renderlo manuale o automatico, dipende dalle proprie esigenze)
    • Inizia.

    Questo è tutto.

    Dopo aver installato un SQLExpress locale nuovo, tutto quello che dovevo fare era abilitare TCP / IP e avviare il servizio SQL Server Browser.

    Sotto un codice che utilizzo per testare la connessione locale SQLEXPRESS. Ovviamente, dovresti cambiare l’IP, DatabaseName e user / password come necessario .:

     import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; public class JtdsSqlExpressInstanceConnect { public static void main(String[] args) throws SQLException { Connection conn = null; ResultSet rs = null; String url = "jdbc:jtds:sqlserver://127.0.0.1;instance=SQLEXPRESS;DatabaseName=master"; String driver = "net.sourceforge.jtds.jdbc.Driver"; String userName = "user"; String password = "password"; try { Class.forName(driver); conn = DriverManager.getConnection(url, userName, password); System.out.println("Connected to the database!!! Getting table list..."); DatabaseMetaData dbm = conn.getMetaData(); rs = dbm.getTables(null, null, "%", new String[] { "TABLE" }); while (rs.next()) { System.out.println(rs.getString("TABLE_NAME")); } } catch (Exception e) { e.printStackTrace(); } finally { conn.close(); rs.close(); } } } 

    E se usi Maven, aggiungi questo al tuo pom.xml:

      net.sourceforge.jtds jtds 1.2.4  

    jdbc:jtds:sqlserver://xxxx/database sostituisce xxxx con l’IP o il nome host del computer SQL Server.

    jdbc:jtds:sqlserver://MYPC/Blog;instance=SQLEXPRESS

    o

    jdbc:jtds:sqlserver://MYPC:1433/Blog;instance=SQLEXPRESS

    Se si desidera impostare anche il nome utente e la password nella stringa di connessione anziché su un object di connessione separatamente:

    jdbc:jtds:sqlserver://MYPC/Blog;instance=SQLEXPRESS;user=foo;password=bar

    (Aggiornate le mie informazioni errate e aggiungo riferimenti alla syntax dell’istanza )

    Uno scatto al buio, ma dall’aspetto del tuo messaggio di errore, sembra che l’istanza sqlserver non sia in esecuzione sulla porta 1433 o qualcosa stia bloccando le richieste a quella porta

    SQLServer esegue l’istanza predefinita sulla porta 1433. Se si specifica la porta come porta 1433, SQLServer cercherà solo l’istanza predefinita. Il nome dell’istanza predefinita è stato creato al momento dell’installazione e in genere è SQLEXPRESSxxx_xx_ENU .

    Il nome dell’istanza corrisponde anche al nome della cartella creato in Programmi -> Microsoft SQL Server. Quindi se guardi lì e vedi una cartella denominata SQLEXPRESSxxx_xx_ENU è l’istanza predefinita.

    Le cartelle denominate MSSQL12.myInstanceName (per SQLServer 2012) sono denominate istanze in SQL Server e non sono accessibili tramite la porta 1433.

    Pertanto, se il programma accede a un’istanza predefinita nel database, specificare la porta 1433 e potrebbe non essere necessario specificare il nome dell’istanza.

    Se il programma accede a un’istanza denominata (non all’istanza predefinita) nel database, NON specificare la porta ma è necessario specificare il nome dell’istanza.

    Spero che questo chiarisca parte della confusione proveniente dagli errori di cui sopra.