Erro com SQL Server + eclipse: Falha na conexão TCP/IP com o host SQL, porta 1433

4 respostas
javamysql
L

Olá pessoal! Tudo bem?
Estou com um problema com o seguinte código:

package criacaoclasseBD;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;
public class BD {

/<em>Objeto que fará conexão usando o drive</em>/

public Connection con= null;

/<em>Sabe executar instruções no SQL</em>/

public PreparedStatement st= null;

/<em>Recebe o resultado de uma instrução</em>/

public ResultSet rs = null;

/<em>Constante que vai armazenar o endereço do driver usado</em>/

//As duas constantes a seguir são informações que deveriam estar criptografadas em outro local

private final String DRIVER = com.microsoft.sqlserver.jdbc.SQLServerDriver;

private final String BANCO =empresa;

//endereço de conexão podendo ser web (localweb, domínio, etc)

private final String URL = jdbc:sqlserver://localhost:1433;integratedSecurity=true”;
/<em>Autenticação do SQLServer</em>/

private final String LOGIN = “leo”;

private final String SENHA = “123456”;
/<em>Metodo que se conecta ao banco</em>/	

public boolean getConnection() {

//Carregar o Driver -> é o processo responsável por fazer a conexão em tempo de execução.

try {

Class.forName(DRIVER);

System.out.println(“Driver carregado”);

/<em>drive manager possui um metodo chamado getConnection para obter(caminho, login, senha)</em>/

con = DriverManager.getConnection(URL, LOGIN, SENHA);

System.out.println(“Conectou”);

return true;

} /<em>Tipo do erro variável que guarda a mensagem do erro e os comandos, como

no exemplo a baixo</em>/

catch(SQLException erro) { /<em>SQL exception para entender oq deu erro</em>/

System.out.println("Falha na conxão: "+erro.getMessage());

}

catch(ClassNotFoundException erro) {

System.out.println(erro.getMessage());
}		
  
  return false;
  /*Aplicação que vai consumir o BD vai saber se deu certo ou não
   * True em try e false em catch*/
}

/<em>Encerra conexão iniciada</em>/

public void close() {

/<em>RS - ResultSet</em>/

try {

if(rs!=null) {

rs.close();

}

}

catch(SQLException erro) {
}
  /*ST - Statement*/
  try {
  	if(st!=null) {
  		st.close();
  	}
  }
  catch(SQLException erro) {
  	
  }
  /*Con - Connection*/
  try {
  	if(con!=null) {
  		con.close();
  		System.out.println("Desconectou");
  	}
  }
  catch(SQLException erro) {
  	
  }

}

public static void main(String[] args) {

//Instancia a classe BD

BD bd = new BD();

bd.getConnection();

//
/*Executar operação*/
  //
  bd.close();

}
}

O problema é o seguinte:
Estou tentando rodar a classe DB para acessar o banco de dados do SQL SERVER 2017, então a gente precisa carregar os drivers que fazem o acesso e depois conectar após ter criado o banco de dados no SQL SERVER e permitido, nas configurações do próprio SQL SERVER, que haja conexão TCP/IP na porta 1433.

Fiz tudo isso ai, tudo bonitinho, tentei conectar com o usuário padrão “sa” no SQL SERVER, deu ruim todas as vezes. O erro gerado foi:

Falha na conxão: Falha na conexão TCP/IP com o host localhost, porta 1433. Erro: “connect timed out. Verifique as propriedades da conexão. Verifique se uma instância do SQL Server está sendo executada no host e se está aceitando conexões TCP/IP na porta. Verifique se as conexões TCP na porta não foram bloqueadas por um firewall.”.

Basicamente, ele não conecta. Meu firewall foi desligado, a porta está aberta, a configuração está ativada, criei um novo usuário chamado “leo” para testar, mas ainda sim, continua sem sucesso.

Meu professor disse que isto poderia se resolvido fazendo o seguinte:

De acordo com a Microsoft, pode haver problema com sua instalação: “Quando você usa autenticação SQL Server, o JDBC Driver exige que SQL Server seja instalado com autenticação SQL Server, que não é o padrão. Verifique se esta opção estará incluída quando você instalar ou configurar sua instância do SQL Server.”

O problema é que eu reinstalei com a autenticação mista, mas para a surpresa de todos nós: não funcionou. Acredito que eu tenha feito a reinstalação de maneira errada, mas de verdade, não estou conseguindo resolver o problema.

Acho que forneci informações suficientes e se alguém puder me ajudar ou tiver uma solução diferente para implementar no código java pra autenticar com o windows, isso me ajudaria muito.

4 Respostas

J

Consegue conectar no banco através do Sql Management Studio, na mesma máquina que a aplicação Java ta sendo executada? E configurou o Sql Server pra permitir conexões via TCP?

L

Consigo sim! e o configurei pra permitir conexões TCP
eu acho que vou tentar usar mysql pra isso, se não vou perder muito tempo

J

Os serviços estao rodando? Sql Server e Sql Server Browser?

L

Infelizmente agora não vou poder responder, no entanto, eu desinstalei o SQLServer e instalei o mySQL pq eu realmente desisti, o problema continua, mas estou vendo uns artigos aqui, pq felizmente, uma pessoa ja passou por um problema parecido ahaha, mas vou digitar o código usado aqui:

package criacaoclasseBD;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;
public class BD {

/<em>Objeto que fará conexão usando o drive</em>/

public Connection con= null;

/<em>Sabe executar instruções no SQL</em>/

public PreparedStatement st= null;

/<em>Recebe o resultado de uma instrução</em>/

public ResultSet rs = null;

/<em>Constante que vai armazenar o endereço do driver usado</em>/

//As duas constantes a seguir são informações que deveriam estar criptografadas em outro local

private final String DRIVER = com.mysql.jdbc.Driver.class;

private final String BANCO =empresa;

//endereço de conexão podendo ser web (localweb, domínio, etc)

private final String URL = jdbc:mysql://localhost:3306/”+BANCO;
/<em>Autenticação do mySQL</em>/

private final String LOGIN = “leo”;

private final String SENHA = “123”;
/<em>Metodo que se conecta ao banco</em>/	

public boolean getConnection() {

//Carregar o Driver -> é o processo responsável por fazer a conexão em tempo de execução.

try {

Class.forName(DRIVER);

System.out.println(“Driver carregado”);

/<em>drive manager possui um metodo chamado getConnection para obter(caminho, login, senha)</em>/

con = DriverManager.getConnection(URL, LOGIN, SENHA);

System.out.println(“Conectou”);

return true;

} /<em>Tipo do erro variável que guarda a mensagem do erro e os comandos, como

no exemplo a baixo</em>/

catch(SQLException erro) { /<em>SQL exception para entender oq deu erro</em>/

System.out.println("Falha na conxão: "+erro.getMessage());

}

catch(ClassNotFoundException erro) {

System.out.println(erro.getMessage());
}		
  
  return false;
  /*Aplicação que vai consumir o BD vai saber se deu certo ou não
   * True em try e false em catch*/
}

/<em>Encerra conexão iniciada</em>/

public void close() {

/<em>RS - ResultSet</em>/

try {

if(rs!=null) {

rs.close();

}

}

catch(SQLException erro) {
}
  /*ST - Statement*/
  try {
  	if(st!=null) {
  		st.close();
  	}
  }
  catch(SQLException erro) {
  	
  }
  /*Con - Connection*/
  try {
  	if(con!=null) {
  		con.close();
  		System.out.println("Desconectou");
  	}
  }
  catch(SQLException erro) {
  	
  }

}

public static void main(String[] args) {

//Instancia a classe BD

BD bd = new BD();

bd.getConnection();

//
/*Executar operação*/
  //
  bd.close();

}
}

Desculpe pela drástica mudança hhaha,
Vou alterar o tópico.

Criado 5 de novembro de 2020
Ultima resposta 5 de nov. de 2020
Respostas 4
Participantes 2