2009-12-07 24 views
46

mi nombre de instancia de servidor sql es MYPC \ SQLEXPRESS y estoy tratando de crear una cadena de conexión jTDS para conectarme a la base de datos 'Blog'. ¿Puede alguien ayudarme a lograr eso?Ayuda para crear una cadena de conexión jTDS

que estoy tratando de hacer como esto:

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

y me sale esto:

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 

Respuesta

105

como se detalla en los jTDS Frequenlty Asked Questions, el formato de URL para jTDS es:

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

Así, para conectarse a una base de datos llamada "Blog", conducido por un MS SQL Server se ejecuta en MYPC, que puede terminar con algo como esto:

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

O, si usted prefiere utilizar getConnection(url, "sa", "s3cr3t"):

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

EDIT: En cuanto a su error Connection refused, vuelve a comprobar que se está ejecutando SQL Server en el puerto 1433, que el servicio se está ejecutando y que no tienen un bloqueo de conexiones entrantes del cortafuegos.

+3

Última cadena de conexión funcionó, después de haber habilitado algunos tcp, vía, tuberías en los Protocolos para SQLEXPRESS en el administrador de configuración del servidor sql – Omu

+1

Gracias amigo, el primero funcionó para mí usando SQL SERVER 2000 –

+0

agregar una propiedad 'instance' para datasources y no agregue la instancia a 'databaseName'. – jan

5

jdbc:jtds:sqlserver://x.x.x.x/database reemplazando x.x.x.x con el IP o el nombre de su máquina de SQL Server.

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

o

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

Si usted está deseando establecer el nombre de usuario y contraseña en la cadena de conexión demasiado en lugar de en contra de un objeto de conexión por separado:

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

(Actualizado mi información incorrecta y añadir una referencia a la instance syntax)

+0

¿dónde especifica el nombre de la base de datos? – Omu

+0

intenté, pero recibí un error, lo publiqué en la pregunta – Omu

+0

Como se mencionó en Pratik y Pascal, debe verificar que el servidor se esté ejecutando en el puerto 1433. –

2

Un disparo en la oscuridad, pero Desde el aspecto de su mensaje de error, parece que sea la instancia SQL Server no se está ejecutando en el puerto 1433 o algo está bloqueando las solicitudes a ese puerto

33

Realmente, realmente, Verifique realmente si el protocolo TCP/IP está habilitado en su instancia SQLEXPRESS local.

Siga estos pasos para asegurarse de que:

  • abierto "SQL Administrador de configuración del servidor" en el "Menú Inicio \ Programas \ Microsoft SQL Server Herramientas 2012 \ Configuration \"
  • red de SQL Server
  • Ampliar" configuración"
  • Go en "Protocolos para SQLEXPRESS"
  • Habilitar TCP/IP

Si tiene algún problema, consulte this blog post para obtener más información, ya que contiene capturas de pantalla y mucha más información.

también comprobar si el servicio de Windows "Explorador de SQL Server" se activa y funcionando:

  • Ir a Panel de control -> Herramientas administrativas - Servicio> Servicios
  • abierto "SQL Server Browser" y habilítelo (haga que sea manual o automático, según sus necesidades)
  • Arranquelo.

Eso es todo.

Después de instalar una nueva SQLExpress local, todo lo que tenía que hacer era habilitar TCP/IP e iniciar el servicio del navegador de SQL Server.

Debajo de un código que utilizo para probar la conexión local SQLEXPRESS. Por supuesto, se debe cambiar la IP, y NombreBaseDatos de usuario/contraseña, según sea necesario .:

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

Y si utiliza Maven, agregar esto a su pom.xml:

<dependency> 
    <groupId>net.sourceforge.jtds</groupId> 
    <artifactId>jtds</artifactId> 
    <version>1.2.4</version> 
</dependency> 
+1

Y asegúrese de estar utilizando el puerto estático = 1433, no un puerto dinámico en su configuración de 'IP todo'. –

+0

¡Eres un hombre realmente bueno! –

-2

SQL Server se ejecuta por defecto instancia sobre el puerto 1433. Si especifica el puerto como puerto 1433, SQLServer solo buscará la instancia predeterminada. El nombre de la instancia predeterminada se creó en la configuración y generalmente es SQLEXPRESSxxx_xx_ENU.

El nombre de la instancia también coincide con el nombre de la carpeta creada en Archivos de programa -> Microsoft SQL Server. Entonces, si miras allí y ves una carpeta llamada SQLEXPRESSxxx_xx_ENU, es la instancia predeterminada.

carpetas con el nombre casos MSSQL12.myInstanceName (para SQL Server 2012) se nombran en SQL Server y se no se accede a través del puerto 1433.

Así que si su programa está accediendo a una instancia predeterminada en la base de datos, especifique puerto 1433, y es posible que no necesite especificar el nombre de la instancia.

Si su programa está accediendo a una instancia con nombre (no la instancia predeterminada) en la base de datos NO especifique el puerto, pero debe especificar el nombre de la instancia.

Espero que esto aclare algo de la confusión que emana de los errores anteriores.

+0

"SQLServer ejecuta la instancia predeterminada sobre el puerto 1433" No, utiliza puertos dinámicos, de manera predeterminada. Además, nunca especifico el nombre de la instancia, así que no tengo que ejecutar el navegador SQL. Cada instancia escucha en una combinación de IP/puerto diferente, dos procesos NO PUEDEN escuchar en la misma combinación de IP/puerto. – thecarpy

+0

Utilizo instancias con nombre con puerto fijo, esto solo se aplica a los parámetros predeterminados – Hybris95

Cuestiones relacionadas