java - suitable - Ayudame a crear una cadena de conexión jTDS
net sourceforge jtds jdbc driver cannot be cast to javax sql datasource (5)
Como se detalla en las Preguntas Frecuentes de jTDS , el formato de URL para jTDS es:
jdbc:jtds:<server_type>://<server>[:<port>][/<database>][;<property>=<value>[;...]]
Por lo tanto, para conectarse a una base de datos llamada "Blog" alojada por un servidor MS SQL que se ejecuta en MYPC
, puede terminar con algo como esto:
jdbc:jtds:sqlserver://MYPC:1433/Blog;instance=SQLEXPRESS;user=sa;password=s3cr3t
O, si prefiere usar getConnection(url, "sa", "s3cr3t")
:
jdbc:jtds:sqlserver://MYPC:1433/Blog;instance=SQLEXPRESS
EDITAR: En cuanto a su Connection refused
error, compruebe que está ejecutando SQL Server en el puerto 1433, que el servicio se está ejecutando y que no tiene un firewall que bloquea las conexiones entrantes.
el nombre de mi 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?
Intento hacer esto:
DriverManager.getConnection("jdbc:jtds:sqlserver://127.0.0.1:1433/Blog", "user", "password");
y entiendo 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
De verdad, realmente, realmente compruebe si el protocolo TCP / IP está habilitado en su instancia SQLEXPRESS local.
Siga estos pasos para asegurarse de que:
- Abra el " Administrador de configuración del servidor Sql " en "Menú de Inicio / Programas / Microsoft SQL Server 2012 / Herramientas de Configuración /"
- Expandir "Configuración de red de SQL Server"
- Vaya a "Protocolos para SQLEXPRESS"
- Habilitar TCP / IP
Si tiene algún problema, consulte esta publicación de blog para obtener más información, ya que contiene capturas de pantalla y mucha más información.
Compruebe también si el servicio de Windows "Navegador de SQL Server" está activado y en ejecución :
- Vaya a Panel de control -> Herramientas administrativas -> Servicios
- Abre el servicio "Navegador de SQL Server" y habilítalo (hazlo manual o automático, depende de tus necesidades)
- Iniciarlo.
Eso es.
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 uso para probar la conexión local SQLEXPRESS. Por supuesto, debe cambiar la dirección IP, el nombre de la base de datos y el 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 usa Maven, agregue esto a su pom.xml:
<dependency>
<groupId>net.sourceforge.jtds</groupId>
<artifactId>jtds</artifactId>
<version>1.2.4</version>
</dependency>
SQLServer ejecuta la instancia predeterminada sobre el puerto 1433. Si especifica el puerto como el 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.
Las carpetas denominadas MSSQL12.myInstanceName (para SQLServer 2012) se denominan instancias en SQL Server y no se puede acceder a ellas a través del puerto 1433.
Entonces, si su programa está accediendo a una instancia predeterminada en la base de datos, especifique el 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.
Una toma en la oscuridad, pero según la apariencia de su mensaje de error, parece que la instancia de sqlserver no se está ejecutando en el puerto 1433 o algo está bloqueando las solicitudes a ese puerto
jdbc:jtds:sqlserver://xxxx/database
reemplazando xxxx
con la IP o el nombre de host de su máquina de SQL Server.
jdbc:jtds:sqlserver://MYPC/Blog;instance=SQLEXPRESS
o
jdbc:jtds:sqlserver://MYPC:1433/Blog;instance=SQLEXPRESS
Si desea establecer el nombre de usuario y la contraseña en la cadena de conexión también en lugar de contra un objeto de conexión por separado:
jdbc:jtds:sqlserver://MYPC/Blog;instance=SQLEXPRESS;user=foo;password=bar
(Actualicé mi información incorrecta y agregué una referencia a la sintaxis de la instancia )