A Aplicação não executa a conexão com o banco depois de construída

Olá Amigos.
Fiz uma pequena aplicação Java utilizando NetBeans e JTDS.
Tudo funciona normalmente no ambiente de testes do Netbeans, porém, ao construir o tentar executar o .jar gerado, só consigo acessar os JDialog’s que não tenham acesso ao banco. Os JDialogs que necessitam acesso ao banco não abrem, deixando claro que a aplicação não está conseguindo conectar ao banco (ou não está conseguindo encontrar algum arquivo de configuração… não sei).

Lembro que estou executando o .jar na mesma máquina que desenvolvi, a única diferença é que estou executando o .jar que ele criou na pasta dist.

O que eu estou deixando de fazer será?!

Obrigado!

Em primeiro lugar, pesquise rápido sobre log…
Segundo, dentro do NB você tem o jar de conexão ao banco no classpath, fora dele, onde está o jar?

Me perdoe, mas já deve ter percebido que sou novo nesse ambiente!

O meu problema é não conhecer bem sobre os termos técnicos para tentar encontrar em uma pesquisa exatamente o que procuro… estou dando uma olhada na sugestão sua, sobre log.

No NB, criei uma classe DBConnection.java que faz a conexão com o banco.
Não tenho importada nenhum .jar na biblioteca para conectar.

Me desculpe, mas eu não sei o que é a classpath… é alguma variável de ambiente onde devo apontar onde estão as minhas classes?!

[quote=CarbIde]Me perdoe, mas já deve ter percebido que sou novo nesse ambiente!

O meu problema é não conhecer bem sobre os termos técnicos para tentar encontrar em uma pesquisa exatamente o que procuro… estou dando uma olhada na sugestão sua, sobre log.

No NB, criei uma classe DBConnection.java que faz a conexão com o banco.
Não tenho importada nenhum .jar na biblioteca para conectar.

Me desculpe, mas eu não sei o que é a classpath… é alguma variável de ambiente onde devo apontar onde estão as minhas classes?!

[/quote]

Como diria o Jack, vamos por partes.
Primeiro, para você entender a forma como java se conecta a um banco de dados, pense que a aplicação java é como a tua placa de rede ou de vídeo do computador. Se você simplesmente conectá-la ao micro, não significa que vá funcionar.
É preciso um software específico, chamado driver, que realiza as vezes de “tradutor”, convertendo o que o windows e a motherboard falam para o que será interpretado pela placa inserida e vice-versa.

Todo banco de dados não conhece java, tampouco bytecode (quando você compila um aplicativo java, a JVM gera um código intermediário chamado bytecode). Por outro lado, java também é monoidioma, ou seja, não entende nada de MySQL, de Oracle ou de qualquer banco de dados. Eles precisam de um interpretador comum, chamado de driver (um jar que é colocado junto do programa, para que ele possa rodar).

Você pode não ter se atentado, mas, se está indo ao banco de dados e voltando, é por ter colocado o driver do banco no classpath.
Classpath é um caminho apontado ao teu programa java, no momento em que ele será executado, para que dependências externas ao projeto, sejam encontradas e possam ser utilizadas.
O classpath mais famoso é o do java, apontado nas variáveis de ambiente do teu sistema operacional (JAVA_HOME, já ouviu falar, não?).

Quanto a log, sugiro pegar um exemplo pronto e usar no código, quando você tenta criar a conexão (ali no try/catch) para verificar onde o erro ocorre, quando e por que.

Ou então, executar o jar a partir do terminal ou prompt de comando.
Para isso, vá até a pasta onde o jar gerado se encontra e, então, execute

java nomeDoArquivoQueFoiGerado

Legal, esclareceu muita coisa!!

E realmente consegui visualizar uma série de erros executando pelo DOS.

Vou depois tratar o try catch para ficar melhor, mas de momento já vi o erro:

Dez 19, 2011 2:38:32 PM DAO.DBConnection connect
Grave: null
java.lang.ClassNotFoundException: net.sourceforge.jtds.jdbc.Driver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
…segue uma lista enorme!

Eu achei que, por ter criado o DBConnection.java com as diretrizes do banco, já seria o suficiente para a aplicação encontrar o banco ao gerar o .jar…

Agora, como faço para colocar no classpath o caminho do driver jtds?! (é isso mesmo que está faltando, não é?!). Posso pesquisar sobre o JAVA_HOME que consigo resolver o meu problema?!

Cara, obrigado mesmo pela ajuda!!

Bom, estranho o erro, pois, ao compilar e gerar o jar, no netbeans, ele já cria uma pasta chamada lib, dentro da dist, onde o jar fica, não?
É nesta lib que o driver do SQLServer deveria ficar.

drsmachado, consegui resolver aqui!

Na verdade, eu não havia importado para o projeto a biblioteca .jar de conexão com o banco, o jtds-1.2.5.jar
Imaginava que não precisava fazer isso, já que nos testes pelo ambiente do Netbeans, estava funcionando mesmo sem ele!

Agora está tudo ok, inclusive com a implementação do try catch dando retorno por uma JOptionPane se não conseguiu conectar com o banco, conforme havia falado!

Valeu mesmo pela ajuda!

Grande abraço!

[quote=CarbIde]drsmachado, consegui resolver aqui!

Na verdade, eu não havia importado para o projeto a biblioteca .jar de conexão com o banco, o jtds-1.2.5.jar
Imaginava que não precisava fazer isso, já que nos testes pelo ambiente do Netbeans, estava funcionando mesmo sem ele!

Agora está tudo ok, inclusive com a implementação do try catch dando retorno por uma JOptionPane se não conseguiu conectar com o banco, conforme havia falado!

Valeu mesmo pela ajuda!

Grande abraço![/quote]

Beleza camarada.
O guj é assim, você pergunta, continua na correria e somando tudo, o resultado é sucesso.