Editado pois já consegui resolver o problema! Deixei apenas o post abaixo.
Banco não Encontrado (JAVA + javadb (Derby))
7 Respostas
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?
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
É 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
Você vai ter o seu .jar e o .jar do derby na mesma pasta.
Um jar não vai dentro do outro.
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!
Você tem algumas opções:
- Fazer um instalador que descompacte toda tranqueirada numa pasta. Aí vc fornece só o instalador;
- Usar aplicativos como o fatJAR, que colocam um .jar dentro de outro;
- Baixar os fontes de suas dependências e compilá-los junto com seu projeto.
Escolha o que achar melhor. 
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ê
Abraços!