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
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.
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.
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>
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 )
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.