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
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.
Vraiment, vraiment, vraiment, vérifiez si le protocole TCP/IP est activé dans votre instance SQLEXPRESS locale.
Suivez ces étapes pour vous assurer:
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 :
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>
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 )
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.