Banco não Encontrado (JAVA + javadb (Derby))

7 respostas
L

Editado pois já consegui resolver o problema! Deixei apenas o post abaixo.

7 Respostas

L

Aproveitando o tópico criado vou fazer outra pergunta que já procurei em diversos lugares e não encontrei resposta. Como eu faço pra distribuir esse programa? Eu já adicionei a biblioteca do Derby ao projeto, mas ao compilar a pessoa para quem eu mandei não conseguiu rodar o aplicativo, pois dava erro de Driver não encontrada. O que eu tenho que fazer para funcionar o programa compilado? Adicionar manualmente o .JAR do SGBD e usar um script para adicionar à classpath do usuário?

ViniGodoy

Ao invés de destruir o tópico, explique porque o problema ocorria e poste a solução!

Não há mal nenhum em “responder a si mesmo”. Isso ajuda os futuros internautas que tiverem a mesma dúvida que você.

Você precisa enviar junto o .jar do Derby.
Se você estiver montando o jar na mão, e não através de uma IDE como Netbeans ou Eclipse, também precisará escrever o arquivo manifest para seu .jar, indicando que a biblioteca é necessária:
http://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html

L

É que era uma coisa bastante estúpida, creio que ninguém vá fazer o mesmo que eu… eu estava usando uma query para “shutdown” que tinha esquecido largado no código de quando estava usando HSQLDB hehe
Daí achei que nem valesse a pena deixar o que realmente aconteceu.

Eu jogo o .jar do Derby manualmente dentro do .jar do meu programa compilado ou jogo no projeto? Eu incluí a biblioteca do Derby nas propriedades do projeto, mas ele não foi pro Build do programa por algum motivo que eu sinceramente desconheço. Obrigado

ViniGodoy

Você vai ter o seu .jar e o .jar do derby na mesma pasta.

Um jar não vai dentro do outro.

L

Eu vou ter que mandar sempre 2 JARs pra quem eu quiser mandar meu programa? =\
Como funcionam essas aplicações standalone que funcionam por si próprias, sem nenhuma dependência MESMO? Sem bridge ODBC, sem arquivos paralelos, enfim... que você baixa ELA e ela configura, conecta e utiliza o banco por si só e assim por diante? :/
Eu não posso colocar o .jar do Derby dentro de uma pasta lib do MEU .jar?

Outro problema que acaba de surgir é que eu segui esse tutorial (abaixo) direitinho, consegui fazer meu programa rodar 100% exceto por uma coisinha.

http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javadb/

Quando eu faço qualquer operação com o banco diz "O esquema ______ não existe". E esse ______ é o mesmo username que eu uso na conexão. Eu nunca trabalhei com Schema de SQL, nunca foi necessário pra mim e nesse momento estou meio perdido, não entendi direito como funciona. Eu sempre criei apenas as tabelas e funcionou, mas agora está dando esse erro de Esquema e eu não sei o que fazer... O stacktrace é o seguinte:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at alimentos.Pesquisar.preencheJTable(Pesquisar.java:842)
	at alimentos.Pesquisar.<init>(Pesquisar.java:31)
	at alimentos.Pesquisar$6.run(Pesquisar.java:746)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
	at java.awt.EventQueue.access$000(EventQueue.java:101)
	at java.awt.EventQueue$3.run(EventQueue.java:666)
	at java.awt.EventQueue$3.run(EventQueue.java:664)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

E esse método preenche jTable citado é o seguinte:

public void preencheJTable(){
            jtAlimentos.getColumnModel().getColumn(0).setPreferredWidth(400);
            jtAlimentos.getColumnModel().getColumn(1).setPreferredWidth(140);
            jtAlimentos.getColumnModel().getColumn(2).setPreferredWidth(120);
            DefaultTableModel modelo = (DefaultTableModel)jtAlimentos.getModel();
            
            modelo.setNumRows(0);
            
            try{
                conexaoPesquisar.query("SELECT * FROM alimentos");
                while(conexaoPesquisar.rs.next()){
                    modelo.addRow(new Object[] {conexaoPesquisar.rs.getString("nome"),conexaoPesquisar.rs.getString("tipo"),conexaoPesquisar.rs.getString("porcao"),conexaoPesquisar.rs.getString("val_energ"),conexaoPesquisar.rs.getString("carb"),conexaoPesquisar.rs.getString("prot"),conexaoPesquisar.rs.getString("gord_sat"),conexaoPesquisar.rs.getString("gord_trans"),conexaoPesquisar.rs.getString("colest"),conexaoPesquisar.rs.getString("fibra"),conexaoPesquisar.rs.getString("sodio"),conexaoPesquisar.rs.getString("calcio"),conexaoPesquisar.rs.getString("ferro")});
                }
            }
                catch(SQLException erro){
                    JOptionPane.showMessageDialog(null, "Não foi possível realizar a consulta.");
                }
            }

Não sei se tem qualquer coisa a ver, mas a chamada desse método preencheJTable está com uma observação no NetBeans:

Chamada de método que pode sobrescrito no construtor

Mas eu não sei o que significa e não deu problema então eu deixei hehe.

Muito obrigado pela atenção!

ViniGodoy

Você tem algumas opções:

  1. Fazer um instalador que descompacte toda tranqueirada numa pasta. Aí vc fornece só o instalador;
  2. Usar aplicativos como o fatJAR, que colocam um .jar dentro de outro;
  3. Baixar os fontes de suas dependências e compilá-los junto com seu projeto.

Escolha o que achar melhor. :slight_smile:

L

Muito obrigado novamente. Resolvi o problema do Schema usando o username como “APP”, que é o default do javaDB (eu suponho). Obrigado pela atenção como sempre, Vini. O seu trabalho nessa comunidade é fantástico. Tudo de melhor para você :smiley: Abraços!

Criado 29 de janeiro de 2012
Ultima resposta 29 de jan. de 2012
Respostas 7
Participantes 2