web-dev-qa-db-fra.com

Créer une chaîne de connexion jTDS

mon nom d'instance de serveur SQL est MYPC\SQLEXPRESS et j'essaie de créer une chaîne de connexion jTDS pour se connecter à la base de données 'Blog'. Quelqu'un peut-il m'aider s'il vous plaît à accomplir cela?

J'essaie de faire comme ça:

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

et je reçois ceci:

 Java.sql.SQLException: Network error IOException: Connection refused: connect
    at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.Java:395)
    at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(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.<init>(SharedSocket.Java:255)
    at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.Java:323)
    ... 6 more
51
Omu

Comme détaillé dans le jTDS Questions Fréquemment Posées , le format de l'URL pour jTDS est:

jdbc:jtds:<server_type>://<server>[:<port>][/<database>][;<property>=<value>[;...]]

Donc, pour vous connecter à une base de données appelée "Blog" hébergée par un serveur MS SQL Server exécuté sur MYPC, vous pouvez vous retrouver avec quelque chose comme ceci:

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

Ou, si vous préférez utiliser getConnection(url, "sa", "s3cr3t"):

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

EDIT: En ce qui concerne votre erreur Connection refused, Vérifiez que vous utilisez SQL Server sur le port 1433, que le service est en cours d'exécution et que vous n'avez pas de pare-feu bloquant les connexions entrantes.

111
Pascal Thivent

Vraiment, vraiment, vraiment, vérifiez si le protocole TCP/IP est activé dans votre instance SQLEXPRESS locale.

Suivez ces étapes pour vous assurer:

  • Ouvrez le " Gestionnaire de configuration du serveur SQL " dans "Menu Démarrer\Programmes\Microsoft SQL Server 2012\Outils de configuration \".
  • Développer "Configuration réseau SQL Server"
  • Allez dans "Protocoles pour SQLEXPRESS"
  • Activer TCP/IP

Si vous avez un problème, vérifiez cet article de blog pour plus de détails, car il contient des captures d'écran et beaucoup plus d'informations.

Vérifiez également si le service Windows "Navigateur SQL Server" est activé et en cours d'exécution :

  • Allez dans le Panneau de configuration -> Outils d'administration -> Services.
  • Ouvrez le service "SQL Server Browser" et activez-le (rendez-le manuel ou automatique, selon vos besoins)
  • Commencez le.

C'est ça.

Après avoir installé un nouveau SQLExpress local, il ne me restait plus qu'à activer TCP/IP et à démarrer le service SQL Server Browser.

Ci-dessous un code que j'utilise pour tester la connexion locale SQLEXPRESS. Bien sûr, vous devez modifier l’IP, le nom de la base de données et le nom de l’utilisateur/mot de passe selon vos besoins.

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();
        }
    }
}

Et si vous utilisez Maven, ajoutez ceci à votre pom.xml:

<dependency>
    <groupId>net.sourceforge.jtds</groupId>
    <artifactId>jtds</artifactId>
    <version>1.2.4</version>
</dependency>
39
acdcjunior

jdbc:jtds:sqlserver://x.x.x.x/database remplaçant x.x.x.x avec l'adresse IP ou le nom d'hôte de votre ordinateur SQL Server.

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

ou

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

Si vous souhaitez également définir le nom d'utilisateur et le mot de passe dans la chaîne de connexion plutôt que sur un objet de connexion séparément:

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

(Mise à jour de mes informations incorrectes et ajout d'une référence à la syntaxe d'instance )

7
Courtney Faulkner

Un coup dans le noir, mais à en juger par votre message d'erreur, il semble que l'instance de sqlserver ne soit pas en cours d'exécution sur le port 1433 ou que quelque chose bloque les demandes de ce port.

4
Pratik Bhatt