- java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
- java.sql.SQLException: Unable to get information from SQL Server
- java.sql.SQLException: Network error IOException: Connection refused: connect SQL Express
- e muito mais!
Tudo isso, você e eu encontramos facilmente quando tentamos nos conectar a um banco de dados SQL Server via JDBC. Visando a redução das despesas mundiais com analgésicos, estou escrevendo esse post para que os desenvolvedores Java possam facilmente configurar sua conexão JDBC com SQL Server. Seguem as dicas:
- Use o JTDS. O Driver da Microsoft é amaldiçoado e fará você perder muito tempo tentando configurar até desistir e ficar frustrado para, só então, resolver usar o JTDS.
- Existem 4 protocolos de comunicação com o SQL Server: TCP/IP, Named Pipes, VIA e Shared Memory. Os dois primeiros são os mais usados, por isso, vou descrever apenas esses dois casos:
- TCP/IP:
- É o meio limpo e bonito e joiado de se trabalhar, por isso, procure usá-lo sempre.
- Usa conexões TCP para comunicação com o SQL Server.
- Garanta que o protocolo TCP/IP esteja habilitado no SQL Server Configuration Manager -> SQL Server 2005 Network Configuration, Protocols for SQL2005 (nome da instancia)
- Abrindo as propriedades do protocolo TCP/IP, podemos definir quais IPs terão acesso ao banco. Normalmente ativo todos e no final, em IP All, coloco TCP Port: 1433
- Após modificar os protoclos, é preciso reiniciar o serviço SQLServer para ativar as novas configurações e, infelizmente, algumas vezes elas não funcionam até que se reinicie o servidor.
- Garanta também que o serviço SQL Server Browser está ativo e na inicialização automática
- Para acesso externo, é preciso configurar o firewall também para liberar as portas TCP 1433 e UDP 1434
- Strings de conexão:
- Driver: net.sourceforge.jtds.jdbc.Driver
- URL: jdbc:jtds:sqlserver://<nome ou IP do servidor>:1433/<nome da base de dados>;instance=<nome da instância>
- Exemplo de URL: jdbc:jtds:sqlserver://ceres:1433/Netuno;instance=SQL2005
- O número da porta só é obrigatório ser o servidor estiver rodando em outra porta
- Named Pipes:
- É a forma nojenta que a Microsoft usa como padrão para o SQL Server.
- Utiliza troca de arquivos em uma pasta compartilhada para comunicação entre o servidor e os clientes (falei que era nojento)
- Por ser padrão, normalmente não é preciso configurar o servidor. Se for o caso, basta habilitar o protocolo Named Pipes no SQL Server Configuration Manager -> SQL Server 2005 Network Configuration, Protocols for SQL2005 (nome da instância)
- Para acesso externo, é preciso garantir que a máquina cliente esteja no mesmo domínio do servidor ou tenha permissão para acessar os compartilhamentos do servidor. Para se certificar disso, basta acessar o servidor pelo Windows Explorer.
- Strings de conexão:
- Driver: net.sourceforge.jtds.jdbc.Driver
- URL: jdbc:jtds:sqlserver://<nome ou IP do servidor>/<nome da base de dados>;instance=<nome da instância>;namedPipe=true
- Exemplo de URL: jdbc:jtds:sqlserver://ceres/Netuno;instance=SQL2005;namedPipe=true
Olá, estou com um problema para usar nome ao invés de ip, por exemplo: teste.ddns.com.br (já testado pelo SQL SERVER 2005), ou seja, só conecta utilizando o ip público.
ResponderExcluir