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 {
/Objeto que fará conexão usando o drive/
public Connection con= null;
/Sabe executar instruções no SQL/
public PreparedStatement st= null;
/Recebe o resultado de uma instrução/
public ResultSet rs = null;
/Constante que vai armazenar o endereço do driver usado/
//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”;/Autenticação do SQLServer/
private final String LOGIN = “leo”;
private final String SENHA = “123456”;/Metodo que se conecta ao banco/
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”);
/drive manager possui um metodo chamado getConnection para obter(caminho, login, senha)/
con = DriverManager.getConnection(URL, LOGIN, SENHA);
System.out.println(“Conectou”);
return true;
} /Tipo do erro variável que guarda a mensagem do erro e os comandos, como
no exemplo a baixo/
catch(SQLException erro) { /SQL exception para entender oq deu erro/
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*/
}
/Encerra conexão iniciada/
public void close() {
/RS - ResultSet/
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.