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);