Como conectar o Firebird com Java?

Oi gente,

Instalei o firebird na minha maquina, com Fedora, e tá rodando bonitinho. Mas, quando tento conectar o banco com java dá o seguinte erro:

org.firebirdsql.jdbc.FBSQLException: Resource Exception. Unable to complete network request to host “localhost”.

O codigo que eu peguei pra testar eh esse:

import java.sql.*;


    public class Bco
    {
        public static void main(String args[])
        {
            System.out.println("#testando acesso a banco de dado Interbase\n\n");
            Connection conn = null;
            String teste = "SELECT NOME FROM TAB_CLI_001;";
            try
            {
                DriverManager.registerDriver(new org.firebirdsql.jdbc.FBDriver());
                Class.forName("org.firebirdsql.jdbc.FBDriver");
                System.out.println("registrou");
                conn = DriverManager.getConnection("jdbc:firebirdsql:localhost:employee", "SYSDBA", "masterke");
                System.out.println("Sucesso na conexão! Massacre!\n");
                Statement stm = conn.createStatement();
                ResultSet rs = stm.executeQuery(teste);
                while (rs.next())
                {
                    String linha = rs.getString("NOME");
                    System.out.println("Cliente:" +linha);
                }

                System.out.println("select realizado\n");
            }
            catch(ClassNotFoundException e)
            {
                System.out.println("excessao ClassNotFound...");
                e.printStackTrace();
            }
            catch(SQLException e)
            {
                System.out.println("SQL Exception... Erro dos Bravos");
                e.printStackTrace();
            }
            finally
            {
                
            }
        }
    }

Já fiz de tudo nessa string de conexao e sempre dah erro. coloquei porta 3050, tirei porta 3050, enfim… alguem pode me ajudar??

Valeu,

Aninha.

A senha do SYSDBA normalmente é “masterkey” e não “masterke”. Se você não trocou a senha esse pode se o erro.

  1. Não fez nada de errado?
    http://www.firebirdsql.org/index.php?op=devel&sub=jdbc&id=faq#6

  2. Pode ser que o seu banco não esteja atendendo na porta 3050, ou então que não atenda como “localhost” na porta 3050.
    Para checar isso, você precisa abrir uma linha de comando e ver o seguinte:

netstat -an | grep 3050 | grep LISTEN

Se aparecer algo como:

tcp        0      0 0.0.0.0:3050            0.0.0.0:*               LISTEN

ou então (supondo que o IP da máquina que roda o Firebird seja 123.4.56.7)

tcp        0      0 0.0.0.0:3050            0.0.0.0:*               LISTEN
tcp        0      0 123.4.56.7:3050            0.0.0.0:*               LISTEN

então você deveria ter conseguido conectar-se ao Firebird. Mesma coisa com

tcp        0      0 127.0.0.1:3050            0.0.0.0:*               LISTEN

Se não aparecer nenhuma linha, é porque o Firebird não está atendendo nessa porta 3050.

Se você sabe que o endereço do servidor é 123.4.5.67 e aparece APENAS uma linha

tcp        0      0 123.4.5.67:3050            0.0.0.0:*               LISTEN

então você precisa passar o endereço do servidor, em vez de localhost, na string de conexão.

O Firebird para linux gera uma senha aleatória na sua instalação, vc deve pegar a senha gerada no arquivo (diretório_do_firebird)/SYSDBA.password e depois executar o arquivo (diretório_do_firebird)/bin/changeDBAPassword.sh
Ai vc informa a senha gerada e a senha definitiva, não esqueça de reiniciar o serviço do firebird para validar as alterações.

Boa sorte.

Oi Luciano,

Qual o nome do serviço que eu tenho que reiniciar??

Aninha

Oi gente,

Conseguiiiii!!! Reinstalei o Firebird, e o meu teste funcionou :smiley:
Eu testei aquele comando que thingol sugeriu (valeu pelo help :wink: ), e realmente não tava aparecendo nada… Ai, eu reinstalei o Firebird e reiniciei o pc e PEGOU!!
Galera, valeu pela ajuda!!!

Aninha.

Pois é, nem sempre o problema está no programa…

Nada que uns comandos esotéricos (netstat -an) não resolvam.

A propósito, existe algum comando fácil no Linux que diga, para uma determinada porta aberta (LISTEN) qual é o programa que está atendendo nessa porta? Aí seria bastante fácil porque seria só o caso de falar:

Rode o comando “x” | grep firebird e veja que porta ele está usando.

No Windows existe um programa chamado tcpview, que você baixa de http://www.sysinternals.com , e lhe diz exatamente isso - programa msdtc.exe, PID 1480, está no ar e está atendendo na porta TCP/1030

msdtc.exe:1480	TCP	beleriand:1030	beleriand:0	LISTENING	

Olá

Seria netstat -oan?

No Windows o “-o” faz aparecer o número do PID do processo. Estou sem acesso a Linux no momento. Fica aqui a sugestão para alguém testar no Linux.

[]s
Luca

É netstat -pan (-p = --program), mas só funciona se você estiver logado como root. Muito legal. Vou pôr na minha caixa de ferramentas.

Não sabia que no Windows tinha a opção -o.
Mas eu sou meio folgado e ainda sou mais o tcpview; só uso netstat -an se vou usar com grep (perdão, findstr) ou se estou em cliente e não posso usar o tcpview.

Tambem estou com o problema acima.

Usando o Flamerobin eu consigo me conectar ao banco !
Já tentei reinstalar e nada …

O comando informado me retorna:

netstat -na |grep 3050 | grep OUÇA tcp 0 0 0.0.0.0:3050 0.0.0.0:* OUÇA

Alguem tem alguma idéia ??

Obrigado

Para deixar registrado:

Desinstalei o firebird e o flamerobin pelo apt-get autoremove

Procurei no Synaptic por firebird2

instalei:
firebird2.0-common
firebird2.0-super
firebird2-super-server
firebird2-utils-super
flamerobin

O problema permaneceu …

Então fui em Administração/Rede/Máquinas e alterei o ip do localhost do meu ip fixo para o padrão 127.0.0.1

Vivendo e aprendendo … :?