Projeto só abre com banco conectado

Eu tenho um projeto em java criado no netbeand. Eu fiz um banco de dados no proprio netbeans suporte , servico com :Derby Ja limpei o projeto e fiz o arquivo.jar dele, Mas quando eu abre ele nao funciona. Ele só funciona se o netbens estiver aberto e eu ir na opcao pra deixar o banco conectado.

Alguem sabe como resolver?

Seu projeto conecta nesse banco de dados?

Deybson eu também passei muita raiva com isso kkkk… É o seguinte…

O servidor do derby precisa ser iniciado para que o banco fique acessível e ele usa uma instancia da JVM pra isso, então quando você vai lá nos serviços e inicia o derby pelo netbeans ele inicia uma nova instancia da JVM e consequentemente seu programa consegue acessar o banco de dados.

Daí quando você fecha o netbeans e roda sua aplicação ele não acessa simplismente porque seu servidor derby foi fechado junto com a instancia da JVM que fechou junto com o netbeans.

Legal! e como resolver? A solução é: Seu programa quando é iniciado também abre uma instancia da JVM certo? então use essa instancia e inicie o servidor do derby pelo codigo do seu programa! assim ele sempre inicia o derby junto com seu programa:

private static void iniciaServidor(String ip) { try { //Seta a variável DERBY_HOME para a pasta que tem os bancos de dados, no meu caso o banco fica dentro da pasta "database" de onde meu programa é iniciado File file = new File("database"); System.setProperty("derby.system.home", file.getAbsolutePath()); //cria o objeto de controle do servidor //libera todos os acessos-> InetAddress.getByName("0.0.0.0"), 1527 //libera só acesso externo -> InetAddress.getByName("192.168.25.100"), 1527 //vazio só libera localhost NetworkServerControlImpl server = new NetworkServerControlImpl(InetAddress.getByName(ip), 1527); //inicia o servidor server.start(new PrintWriter(System.out)); DaoStatus.getLista(); } catch (Exception ex) { Alerta.show(ex); } }

Dentro da sua classe principal crie o metodo acima e faça isso ser executado assim que seu programa abre.

Perceba também que coloquei também 3 formas do seu banco de dados funcionar… Se no argumento desse método (ou seja, o “ip”) você colocar “0.0.0.0” seu banco de dados fica acessivel por qualquer computador da rede, se você colocar seu numero de IP de rede (por exemplo: 192.168.25.100) sua máquina não consegue acessar, mas todas as outras da rede conseguirão, e se for vazio ("") o banco só será visto pela sua máquina.

Desculpe o textão, mas eu passei muita raiva até entender isso e adoraria ter lido essa resposta na época, espero ter ajudado.

Copiei o codigo , mas o netbeans não reconheceu alguns, tenho umas dúvidas:

  • a linha InetAdress.getByName nao reconheceu nem a NetworkserverControllImpl new…
    E a linha Alert.show
    Pode me ajudar?

Descupa Deybson só vi agora XD

Se dentro da sua pasta “Bibliotecas” tem os drivers do derby (derby.jar, derbyClient.jar, derbyNet.jar) é só apertar Ctrl + i para corrigir as importações.

Tem que aparecer a seguinte importação:

import org.apache.derby.impl.drda.NetworkServerControlImpl;

E me perdoe sobre a linha

Alerta.show(ex)

é que eu tenho um alerta personalizado que uso sempre… Troque a linha acima por:

System.out.println(ex);