Ajuda-me a criar um texto de ligação jTDS

O meu nome da instância do servidor sql é MYPC\SQLEXPRESS e estou a tentar criar um texto de ligação jTDS para se ligar ao 'Blog'da base de dados. Alguém me pode ajudar a conseguir isso ?

Estou a tentar fazer assim.
DriverManager.getConnection("jdbc:jtds:sqlserver://127.0.0.1:1433/Blog", "user", "password");

e eu percebo isto:

 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
Author: Omu, 2009-12-07

5 answers

Tal como detalhado no jTDS Frequenlty fez perguntas, o formato de URL para jTDS é:

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

Então, para se ligar a uma base de dados chamada "Blog" hospedada por um servidor de MS SQL em execução em MYPC, você pode acabar com algo assim:

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

Ou, se preferir utilizar getConnection(url, "sa", "s3cr3t"):

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

Editar: em relação ao seu erro Connection refused, Verifique se está a correr o servidor SQL no Porto 1433, se o serviço está a correr e se não tem um bloqueio de firewall conexao.

 108
Author: Pascal Thivent, 2009-12-07 21:39:11

A sério, a sério, verifique realmente se o protocolo TCP/IP está activo na sua instância local SQLEXPRESS.

Siga estes passos para se certificar:

  • abrir "SQL Server Configuration Manager " em "Menu Iniciar\Programs\Microsoft SQL Server 2012\Configuration Tools\"
  • expandir a "configuração da rede de servidores SQL"
  • entrar em "Protocolos para SQLEXPRESS"
  • activar o TCP / IP

Se tiver algum problema, verifique Este post para detalhes, como ele contém screenshots e muito mais informações.

Verifique também se o serviço windows" SQL Server Browser " está activado e em execução:

  • ir ao Painel de Controlo -> Ferramentas Administrativas - > Serviços
  • abrir o serviço de "navegador de servidor SQL" e activá-lo (torná-lo manual ou automático, depende das suas necessidades)
  • Começa.
É isso.

Depois de ter instalado um novo SQLExpress local, tudo o que tinha de fazer era activar o TCP / IP e iniciar o serviço de navegação do servidor SQL.

Abaixo de um código que uso para testar a ligação local SQLEXPRESS. Claro, você deve alterar o IP, o nome da Base de dados e o usuário/senha conforme necessário.:

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 utilizar Maven, adicione isto ao seu pom.xml:

<dependency>
    <groupId>net.sourceforge.jtds</groupId>
    <artifactId>jtds</artifactId>
    <version>1.2.4</version>
</dependency>
 35
Author: acdcjunior, 2013-03-15 12:40:07

jdbc:jtds:sqlserver://x.x.x.x/database a substituir o x.x.x.x pelo IP ou nome da máquina do seu servidor de SQL.

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

Ou

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

Se quiser definir o nome de utilizador e a senha também no texto de ligação, em vez de contra um objecto de ligação separadamente:

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

(actualizou a minha informação incorrecta e adiciona referência à sintaxe da instância )

 6
Author: Courtney Faulkner, 2010-07-19 19:27:55
Um tiro no escuro, mas ... Pela aparência da sua mensagem de erro, parece que ou a instância sqlserver não está a correr no Porto 1433 ou algo está a bloquear os pedidos para esse porto
 3
Author: Pratik Bhatt, 2009-12-07 20:05:10

O SQLServer executa a instância por omissão sobre o porto 1433. Se indicar o porto como porto 1433, o SQLServer só irá procurar a instância por omissão. O nome da instância padrão foi criado na configuração e normalmente é Sqlexpressxx_xx_enu .

O nome da instância também corresponde ao nome da pasta criada nos ficheiros do programa -> Microsoft SQL Server. Então, se você olhar para lá e ver uma pasta chamada Sqlexpressxxx_x_enu é a instância padrão.

Pastas com nome MSSQL12.myInstanceName (para o SQLServer 2012) são instâncias nomeadas no servidor SQL e são not acessadas através do Porto 1433.

Se o seu programa está a aceder a uma instância por omissão na base de dados, indique o porto 1433, e poderá não precisar de indicar o nome da instância.

Se o seu programa está a aceder a uma instância com nome (não à instância por omissão) na base de Dados Não indique o porto, mas tem de indicar o nome da instância.

Espero que isto esclareça alguma da confusão que emana dos erros acima.
 -2
Author: Nelda.techspiress, 2015-05-07 21:44:42