Galera a algumas semanas venho desenvolvendo um programa em java com banco de dados Derby, com muitos problemas, erros, e buscas no google, e aqui no guj… rs rs Fiz essa compilação que pode ajudar muito quem for tentar fazer algo parecido.
Primeiro de tudo e mais importante( Acredite!) Configuração do Ambiente e Instalação do Derby(JavaDb ou Apache)
Instalação do Derby fora de IDES
Para poder instalar o Derby, primeiro é necessário baixar o arquivo zip ou tar do Derby do site do Derby na Web.
Acesse a página http://db.apache.org/derby/derby_downloads.html utilizando o navegador Web. Esta página contém várias distribuições do Derby, incluindo pacotes instantâneos e distribuições binárias de versões estáveis. Também são encontradas informações sobre como acessar a distribuição do código ativo do Derby. As distribuições se encontram em pacotes bin, lib e src. Este guia assume que foi baixado o pacote de distribuição bin.
Extraia o pacote baixado. A instalação extraída contém vários subdiretórios:
• O subdiretório demo contém programas de demonstração.
• O subdiretório frameworks contém scripts para a execução de utilitários e configuração do ambiente.
• O subdiretório javadoc contém a documentação da api gerada a partir dos comentários do código fonte.
• O subdiretório doc contém a documentação do Derby.
• O subdiretório lib contém os arquivos jar do Derby.
Configuração do ambiente Java
É necessário configurar a variável de ambiente PATH para que a JVM e os aplicativos Java executem corretamente. Isto é extremamente importante para o sucesso da instalação, porque a variável PATH permite que o sistema operacional encontre os programas apropriados a partir de qualquer diretório.
Se houver mais de uma JVM instalada, a JVM que se deseja utilizar deve estar antes de qualquer outra na variável PATH.
Para verificar a variável de ambiente PATH:
- Em uma janela de comando, digite: java -version
Se o caminho estiver definido corretamente, será exibida uma informação indicando a versão da JVM. - Se o comando não retornar a versão correta da JVM, a variável PATH deve ser configurada adicionando o subdiretório bin do diretório da JVM ao começo do caminho.
Por exemplo, se o diretório for C:\JDK1.4 , deve ser adicionado C:\JDK1.4\bin ao começo do caminho. - O passo 1 deve ser repetido para haver certeza que a variável de ambiente PATH está configurada corretamente.
Instalação do Derby no Netbeans(Se o seu Netbeans não veio com o Glassfish embutido)
Ferramentas > Servidores : O GlassFish Server deve aparecer. Se não estiver aparecendo tera de instalar; Va em Adicionar Servidor… > GlassFish e siga os passos!
Trabalhando com o banco de dados
Nesse link temos algumas instruções para se trabalhar com o banco de dados na ide(https://netbeans.org/kb/docs/ide/java-db_pt_BR.html)
• Configurando o Banco de Dados
• Registrando o Banco de Dados no NetBeans IDE
• Iniciando o Servidor e Criando um Banco de Dados
• Estabelecendo Conexão com o Banco de Dados
Classes Bean e DAO:
package model.bean;
/**
*
* @author Marcos
*/
public class Funcionario {
private String nome;
private String email;
private String nascimento;
private String cpf;
private String rg;
private String telefone1;
private String telefone2;
private String cargo;
private String formação;
private String atributos;
private String cargahoraria;
private String salario;
/**
* @return the nome
*/
public String getNome() {
return nome;
}
/**
* @param nome the nome to set
*/
public void setNome(String nome) {
this.nome = nome;
}
/**
* @return the email
*/
public String getEmail() {
return email;
}
/**
* @param email the email to set
*/
public void setEmail(String email) {
this.email = email;
}
/**
* @return the nascimento
*/
public String getNascimento() {
return nascimento;
}
/**
* @param nascimento the nascimento to set
*/
public void setNascimento(String nascimento) {
this.nascimento = nascimento;
}
/**
* @return the cpf
*/
public String getCpf() {
return cpf;
}
/**
* @param cpf the cpf to set
*/
public void setCpf(String cpf) {
this.cpf = cpf;
}
/**
* @return the rg
*/
public String getRg() {
return rg;
}
/**
* @param rg the rg to set
*/
public void setRg(String rg) {
this.rg = rg;
}
/**
* @return the telefone1
*/
public String getTelefone1() {
return telefone1;
}
/**
* @param telefone1 the telefone1 to set
*/
public void setTelefone1(String telefone1) {
this.telefone1 = telefone1;
}
/**
* @return the telefone2
*/
public String getTelefone2() {
return telefone2;
}
/**
* @param telefone2 the telefone2 to set
*/
public void setTelefone2(String telefone2) {
this.telefone2 = telefone2;
}
/**
* @return the cargo
*/
public String getCargo() {
return cargo;
}
/**
* @param cargo the cargo to set
*/
public void setCargo(String cargo) {
this.cargo = cargo;
}
/**
* @return the formação
*/
public String getFormação() {
return formação;
}
/**
* @param formação the formação to set
*/
public void setFormação(String formação) {
this.formação = formação;
}
/**
* @return the atributos
*/
public String getAtributos() {
return atributos;
}
/**
* @param atributos the atributos to set
*/
public void setAtributos(String atributos) {
this.atributos = atributos;
}
/**
* @return the cargahoraria
*/
public String getCargahoraria() {
return cargahoraria;
}
/**
* @param cargahoraria the cargahoraria to set
*/
public void setCargahoraria(String cargahoraria) {
this.cargahoraria = cargahoraria;
}
/**
* @return the salario
*/
public String getSalario() {
return salario;
}
/**
* @param salario the salario to set
*/
public void setSalario(String salario) {
this.salario = salario;
}
}
package model.dao;
import Connection.Connector;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import model.bean.Funcionario;
/**
*
* @author MarcosIY
*/
public class FuncionarioDAO {
public void creat(Funcionario f){
Connection con = Connector.getConnection();
PreparedStatement stmt = null;
try {
stmt = con.prepareStatement("INSERT INTO app.bancofuncionario (nome,email,nascimento,cpf,rg,telefone1,telefone2,cargo,cargahoraria,formação,atributos,salario) VaLUES(?,?,?,?,?,?,?,?,?,?,?,?)");
stmt.setString(1,f.getNome());
stmt.setString(2,f.getEmail());
stmt.setString(3,f.getNascimento());
stmt.setString(4,f.getCpf());
stmt.setString(5,f.getRg());
stmt.setString(6,f.getTelefone1());
stmt.setString(7,f.getTelefone2());
stmt.setString(8,f.getCargo());
stmt.setString(9,f.getCargahoraria());
stmt.setString(10,f.getFormação());
stmt.setString(11,f.getAtributos());
stmt.setString(12,f.getSalario());
stmt.executeUpdate();
JOptionPane.showMessageDialog(null, "Salvo com sucesso");
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Erro "+ex);
} finally{
Connector.closeConnection(con, stmt);
}
}
public List<Funcionario> read(){
Connection con = Connector.getConnection();
PreparedStatement stmt = null;
ResultSet rs = null;
List<Funcionario> funcionarios = new ArrayList<>();
try {
stmt = con.prepareStatement("SELECT * FROM app.bancofuncionario");
rs = stmt.executeQuery();
while(rs.next()){
Funcionario funcionario = new Funcionario();
funcionario.setNome(rs.getString("nome"));
funcionario.setEmail(rs.getString("email"));
funcionario.setNascimento(rs.getString("nascimento"));
funcionario.setCpf(rs.getString("cpf"));
funcionario.setRg(rs.getString("rg"));
funcionario.setTelefone1(rs.getString("telefone1"));
funcionario.setTelefone2(rs.getString("telefone2"));
funcionario.setCargo(rs.getString("cargo"));
funcionario.setFormação(rs.getString("formação"));
funcionario.setAtributos(rs.getString("atributos"));
funcionario.setCargahoraria(rs.getString("cargahoraria"));
funcionario.setSalario(rs.getString("salario"));
funcionarios.add(funcionario);
}
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Erro: "+ex);
}finally{
Connector.closeConnection(con, stmt, rs);
}
return funcionarios;
}
public void update(Funcionario f){
Connection con = Connector.getConnection();
PreparedStatement stmt = null;
try {
stmt = con.prepareStatement("UPDATE app.bancofuncionario SET email = ?, nascimento = ?, cpf = ?, rg = ?, "
+ "telefone1 = ?, telefone2 = ?, cargo = ?, cargahoraria = ?, formação = ?, atributos = ?, salario = ? WHERE nome = ? or cpf = ? or rg = ?");
stmt.setString(1,f.getEmail());
stmt.setString(2,f.getNascimento());
stmt.setString(3,f.getCpf());
stmt.setString(4,f.getRg());
stmt.setString(5,f.getTelefone1());
stmt.setString(6,f.getTelefone2());
stmt.setString(7,f.getCargo());
stmt.setString(8,f.getCargahoraria());
stmt.setString(9,f.getFormação());
stmt.setString(10,f.getAtributos());
stmt.setString(11,f.getSalario());
stmt.setString(12,f.getNome());
stmt.setString(13,f.getCpf());
stmt.setString(14,f.getRg());
stmt.executeUpdate();
JOptionPane.showMessageDialog(null, "Atualizado com sucesso!");
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Erro ao atalizar: "+ex);
} finally{
Connector.closeConnection(con, stmt);
}
}
public void delete(Funcionario f){
Connection con = Connector.getConnection();
PreparedStatement stmt = null;
try {
stmt = con.prepareStatement("DELETE FROM app.bancofuncionario WHERE nome = ? or cpf = ? or rg = ?");
stmt.setString(1,f.getNome());
stmt.setString(2,f.getCpf());
stmt.setString(3,f.getRg());
stmt.executeUpdate();
JOptionPane.showMessageDialog(null, "Deletado com sucesso!");
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Erro ao Deletar: "+ex);
} finally{
Connector.closeConnection(con, stmt);
}
}
}
Classes Connection enquanto netbeans
/**
*
* @author MarcosIY
*/
public class Connector {
private static final String DRIVER = "org.apache.derby.jdbc.ClientDriver";
private static final String URL = "jdbc:derby://localhost:1527/BancoGerenciador";
private static final String USER = "Usuario";
private static final String PASS = "Senha";
public static Connection getConnection(){
//Servidor do banco iniciado pelo NetBeans
//Util enquanto cria e configura o banco e as tabelas pelo NetBeans
try {
Class.forName(DRIVER);
return java.sql.DriverManager.getConnection(URL, USER, PASS);
} catch (ClassNotFoundException | SQLException ex) {
throw new RuntimeException("Erro na conecção: ",ex);
}}
/*...*/
//Resto do codigo e imports na versão definitiva abaixo:
Classes Connection fora do netbeans para distribuição
package Connection;
import java.io.PrintWriter;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import org.apache.derby.impl.drda.NetworkServerControlImpl;
/**
*
* @author MarcosIY
*/
public class Connector {
private static final String DRIVER = "org.apache.derby.jdbc.ClientDriver";
private static final String URL = "jdbc:derby://localhost:1527/Banco"; //porta padrão
private static final String USER = "Usiario";
private static final String PASS = "Senha ";
public static Connection getConnection(){
//Iniciar o banco sem precisar o fazer manualmente toda vez que executar e sem usar o netbeans
try {
System.setProperty("derby.system.home", "\\MyDB\\.netbeans-derby");
// Crie uma pasta onde você quiser que fique o seu banco e set aqui
//pode ser qualquer diretorio incluindo a pasta onde estara o executavel(.jar)
//nesse Caso: C:\\MyDB\\.netbeans-derby
NetworkServerControlImpl networkServer = new NetworkServerControlImpl();
networkServer.start(new PrintWriter(System.out));
System.out.println("Banco Iniciado");
} catch (Exception ex) {
System.out.println("Não conseguiu iniciar banco de dados.");
}
try {
Class.forName(DRIVER);
return java.sql.DriverManager.getConnection(URL, USER, PASS);
} catch (ClassNotFoundException | SQLException ex) {
throw new RuntimeException("Erro na conecção: ",ex);
}}
public static void closeConnection(Connection con){
try {
if(con!=null){
con.close();
}
}catch (SQLException ex) {
//menssagem
}
}
public static void closeConnection(Connection con, PreparedStatement stmt){
closeConnection(con);
try {
if(stmt!=null){
stmt.close();
}
}catch (SQLException ex) {
//menssagem
}
}
public static void closeConnection(Connection con, PreparedStatement stmt, ResultSet rs){
closeConnection(con, stmt);
try {
if(rs!=null){
rs.close();
}
}catch (SQLException ex) {
//menssagem
}
}
public static void Fazbackup(Connection con){
try {
String backupdirectory = "\\MyDB\\.netbeans-derby";
CallableStatement cs = con.prepareCall ("CALL SYSCS_UTIL.SYSCS_BACKUP_DATABASE (?)");
cs.setString (1, backupdirectory);
cs.execute ();
cs.close ();
JOptionPane.showMessageDialog(null, "Backup feito com sucesso");
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Erro no backup"+ ex);
}
}
public static void LerBackup(String diretorio){
String a = diretorio;
try {
Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
DriverManager.getConnection("jdbc:derby:BancoGerenciador;restoreFrom="+a);
JOptionPane.showMessageDialog(null, "Backing Up Realizado com sucesso!");
} catch (InstantiationException ex) {
JOptionPane.showMessageDialog(null, "Erro no backing Up"+ ex);
} catch (IllegalAccessException ex) {
JOptionPane.showMessageDialog(null, "Erro no backing Up"+ ex);
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Erro no backing Up"+ ex);
} catch (ClassNotFoundException ex) {
JOptionPane.showMessageDialog(null, "Erro no backing Up"+ ex);
}
}
}
Não esqueça de adicionar os arquivos .jar, bibliotecas, docs, etc no classpath do projeto
Pode (E é muito provável que tenha) mais coisa, mas eu só sei isso, e se tem eu não achei e essa é uma oportunidade pra agregar e compartilhar o conhecimento (Eu sei como é difícil ter acesso a todo o conteúdo quando se estuda por conta).
http://db.apache.org/derby/ https://db.apache.org/derby/docs/10.2/pt_BR/getstart/getstartderby.pdf
http://db.apache.org/derby/derby_downloads.html#Latest+Official+Release
Paz…