Criando e Manipulado Banco de Dados Local e Servidor Derby em Java
Autor: Luiz Renato | Publicado: 2015-08-02T20:40:00-03:00



Conectando e manipulando Aparche Derby em Java e Java DB usando apenas recursos necessários para realizar a interação Local (Embedded) e Serviodor (Web /Java DB/Service...). O NetBeans também é&nbsp;servidor/gerenciador de dados e por isso esse tutorial se aplica também para Oracle, MySQ e etc... O Próximo será para MySQL.



O que é o Derby?
Apache Derby é um sistema de gerenciamento de banco de dados relacional Java que pode ser embutido em programas Java e usado para processamento de transações online. Consome apenas 2 MB de espaço em disco.1 O Apache Derby é desenvolvido como um projeto open source sob a Apache 2.0 licence. O Derby era anteriormente distribuido como IBM Cloudscape. Atualmente é distribuído como Sun Java DB.









Vamos lá!







Requerimentos:


*Conhecimento básico de SQL
*Conhecimento básico em Java.
*Orientação de
     Objetos(import/classes/métodos/funções).
*Usar uma IDE
     (NetBenas/Eclipse).
Gerenciador Derby ativado(Service ou NetBeans aberto) no Sistema para conectar a Servidor localhost.(Local DB não precisa de nada disso)







Recomendações:




JDK 1.8*
JRE 1.8*
NetBeans 8.*






Criando um novo projeto em NetBeans 8.*&gt; Arquivo &gt; Novo Projeto &gt; Java &gt; Aplicação Java...



Criando novo projeto Java no NetBeans








Após criar...



Modelo class principal Java by Luiz R.




Vamos logo importar o Derby.jar e você pode fazer&nbsp;isso&nbsp;de dentro do seu NetBeans ou&nbsp;download do Site do Apache Derby.&nbsp;Para importação offline, vc clica com o botão direito em Bibliotecas &gt; Adicionar Biblioteca &gt; importar &gt;&nbsp;Driver JDBC do Java DB, com isso ele vai importar o pacote&nbsp;Derby.jar, Derbycliente.jar e Derbyweb.jar.&nbsp;Para este tutorial você só precisa do Derby.jar. &nbsp;Pode fazer também selecionando "Adicionar JAR/Pasta" ao invés de biblioteca e importar o derby.jar.



Importando bibliotecas no Java






Vamos apagando o que for desnecessário do modelo pré definido... Até ficar assim:
Observe que eu estou usando um tema Monokai com modelo já modificado por mim e o seu deve ser o padrão/diferente, caso esteja interessado eu disponibilizo ele aqui.



Iniciando a conexão SQL





Observe que eu acrescentei&nbsp;import&nbsp;java.sql.*;&nbsp;que é uma importação padrão, porém o "*" quer dizer que quero usar todas a classes do java.SQL,
Try/Catch será&nbsp;muito importante porque o Java não tolera e o programa vai tentar executar dentro do bloco try, se ocorrer um erro fatal o programa não vai mostrar bugs nem cancelamento de processo, ele vai dar catch e dizer que ocorreu um problema. Exeption/SQLExeption&nbsp;pode ser incrementada com uma variável pra armazenar o erro ex: (Exception Err), Err vai ser a variável.&nbsp;





Criei um objeto(conn) que estabeleceu uma conexão com o Embedded Driver "org.apache.derby.jdbc.EmbeddedDriver"&nbsp;através do Derby.jar&nbsp; usando a&nbsp;String&nbsp;"jdbc:derby:.\\LocalDB;create=true;"&nbsp;como parâmetros para criar o Banco de dados Local DB. (pode copiar, é código!).

<!-- HTML generated using hilite.me -->

package conectderby;
import java.sql.*;
//by Luiz R.
public class ConectDerby
{
    public static void main(String[] args)
    {
        Connection conn=null;
        
        try{
            Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
            
            conn = DriverManager.getConnection("jdbc:derby:.\\LocalDB");
            System.out.println("Conectado com sucesso...");
            
        }catch(ClassNotFoundException | SQLException Err){
            System.out.println("Erro ao tentar conectar em Bando de dados localdb... "+Err);
        } 
        
        //PROXIMO PASSO COM ERRO OU NÃO..
        
        try{
            if(conn==null){
                System.out.println("Criando bando de dados local...");
                conn = DriverManager.getConnection("jdbc:derby:.\\LocalDB;create=true;");                            
            }
            
            Statement sql = conn.createStatement();
            
            System.out.println("Banco de dados LocalDB criado com sucesso...");
            
            /*
            DAKI PRA BAIXO ANTES DE close() PODE MANIPULAR TODO O DERBY EM SQL
            sql.executeUpdate("CREATE/INSERT/DELETE/ETC..."); PARA EXECUTAR COMANDOS QUE ATUALIZEM A TABELA
            sql.executeQuery("SELECT..."); PARA OBTER DADOS DA TABELA E IMPRIMIR A MATRIZ EM UM LOOPING
            */
            
            conn.close();
            
        }catch(Exception Err){
            System.out.println("Ocorreu um erro. "+Err);
        }
    }
}



Será criado 2 aquivos no diretório de onde esta sendo executado o console do Java (.\\LocalDB), um vai ser a pasta do Banco de dados "LocalDB" e o outro é um log derby.txt. Se for uma compilação.jar em "dist" é criado no mesmo diretório(dentro de dist) a na lib(da dist) você só vai precisar do Derby.jar



Local onde se instala o Banco de Dados pelo console do Java







Observe que criei um outro objeto que chamei de sql para executar os comandos SQL através de executeUpdate();&nbsp;Se for para ler você substitui por&nbsp;executeQuery(); através de um looping para poder obter dados da matriz table.





<!-- HTML generated using hilite.me -->

package conectderby;
import java.sql.*;
/*
ou... só os componentes necessarios...
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
*/
//by Luiz R.
public class ConectDerby
{
    public static void main(String[] args)
    {
        //AQUI VAMOS DECLARAR A CONEXÃO CHAMANDO DE "conn" PARA MELHOR ORGANIZAÇÃO
        Connection conn=null;
        
        try{
            //DETECTANDO CLASS DRIVER DERBY...
            Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
            
            //ESTABELECENDO CONEXÃO AO BANCO DE DADOS LocalDB...
            conn = DriverManager.getConnection("jdbc:derby:.\\LocalDB");
            System.out.println("Conectado com sucesso...");
            
        }catch(ClassNotFoundException | SQLException Err){
            System.out.println("Erro ao tentar conectar em Bando de dados localdb... "+Err);
        } 
        
        //PROXIMO PASSO COM ERRO OU NÃO..
        
        try{
            //CRIANDO BANCO DE DADOS LOCAL SE A CONEXÃPO "conn" FOI NULL-VAZIA(NÃO ENCONTRADA)
            //APENAS ACRESCENTAR create=true;
            if(conn==null){
                System.out.println("Criando bando de dados local...");
                conn = DriverManager.getConnection("jdbc:derby:.\\LocalDB;create=true;");                            
            }
            
            Statement sql = conn.createStatement();
            
            //CRIANDO TABELA "LOGIN" NO DERBY
            /*OBSERVE COMO É O AUTO_INCREMENT DO DERBY, É TODO ESSE MONSTRO:
            GENERATED ALWAYS AS IDENTITY(START WITH 1, INCREMENT BY 1)
            */
            
            try{
                sql.executeUpdate(""
                        + "CREATE TABLE LOGIN("
                        + "ID INT GENERATED ALWAYS AS IDENTITY(START WITH 1, INCREMENT BY 1) PRIMARY KEY NOT NULL,"
                        + "NICK VARCHAR(15) NOT NULL,"
            + "SENHA INT NOT NULL)");
                System.out.println("Tabela criada com sucesso...");
            }catch(Exception Err){
                System.out.println("Erro ao tentar criar tabela. "+Err);
            }
            
            //INSERINDO DADOS NO DERBY/LOGIN
            
            try{
                sql.executeUpdate(""
                        + "INSERT INTO LOGIN (NICK,SENHA) VALUES "
                        + "('Dark',123456),"
                        + "('Goku',123),"
                        + "('Dracula',666)");
                System.out.println("Dados inseridos com sucesso...");
            }catch(Exception Err){
                System.out.println("Erro ao tentar inserir dados. "+Err);
            }
            
            //IMPRIMINDO DADOS DA TABELA DERBY/LOGIN... NO CONSOLE :P
            //PERBECA EM JAVA, EU POSSO DETERMINAR SE QUERO INT COMO STRING EX: ID E SENHA
            
            try{
                ResultSet get = sql.executeQuery("SELECT * FROM LOGIN");
                
                while(get.next()){                              
                    int ID = get.getInt("ID");
                    String NICK = get.getString("NICK");
                    String SENHA = get.getString("SENHA");            
                    System.out.println(ID+", "+NICK+", "+SENHA);
                    //System.out.printf("%d, %s, %s\n", ID,NICK,SENHA); //format ;D
                }
            }catch(Exception Err){
                System.out.println("Erro ao tentar imprimir dados. "+Err);
            }
            
            conn.close();
            
        }catch(Exception Err){
            System.out.println("Ocorreu um erro. "+Err);
        }
    }
}




Console após executar o código acima



Para conectar em Servidores você apenas vai usar a&nbsp;String&nbsp;"jdbc:derby://host:port//DB;user=?;password=?"


Observe que em Servidor é ainda mais simples, não precisa da class embedded driver.

<!-- HTML generated using hilite.me -->

package conectderby;
import java.sql.*;
//by Luiz R.
public class ConectDerby
{
    public static void main(String[] args)
    {
                
        try{           
            //PARAMETROS("jdbc:derby://host:port//DB;user=?;password=?");
            Connection conn = DriverManager.getConnection(""
                    + "jdbc:derby://localhost:1527/TESTE;"
                    + "user=root;"
                    + "password=root");

            System.out.println("Conectado com sucesso...");
            
            Statement sql = conn.createStatement();
            
            /*
            DAKI PRA BAIXO ANTES DE close() PODE MANIPULAR TODO O DERBY/JavaDB EM SQL
            sql.executeUpdate("CREATE/INSERT/DELETE/ETC..."); PARA EXECUTAR COMANDOS QUE ATUALIZEM A TABELA
            sql.executeQuery("SELECT..."); PARA OBTER DADOS DA TABELA E IMPRIMIR A MATRIZ EM UM LOOPING
            */
            
            conn.close();
            
        }catch(Exception Err){
            System.out.println("Ocorreu um erro. "+Err);
        }
    }
}



Em NetBeans 8.* &gt; selecione a aba "Serviços" &gt; expanda "Bancos de Dados" &gt; clique com o botão direito em "Java DB" &gt; Iniciar Servidor e depois &gt; Criar Banco de Dados... Espere alguns segundos e vai criar como no exemplo: jdbc:derby://localhost:1527/TESTE [root em ROOT] , (se clicar nas propriedades do seu banco de dados pode pegar o URL dele e colar no seu script).



Criando Banco de Dados no Java DB


Após criar o Banco de dados no Java DB do NetBeans 8.* e manter o Servidor ligado, você já pode executar seu script pra conectar e manipular ele...

<!-- HTML generated using hilite.me -->

package conectderby;
import java.sql.*;
/*
ou... só os componentes necessarios...
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
*/
//by Luiz R.
public class ConectDerby
{
    public static void main(String[] args)
    {
                
        try{           
            //PARAMETROS("jdbc:derby://host:port//DB;user=?;password=?");
            Connection conn = DriverManager.getConnection(""
                    + "jdbc:derby://localhost:1527/TESTE;"
                    + "user=root;"
                    + "password=root");
            System.out.println("Conectado com sucesso...");
            
            Statement sql = conn.createStatement();
            
            //CRIANDO TABELA "LOGIN" NO JavaDB/TESTE
            /*OBSERVE COMO É O AUTO_INCREMENT DO DERBY, É TODO ESSE MONSTRO:
            GENERATED ALWAYS AS IDENTITY(START WITH 1, INCREMENT BY 1)
            */
            
            try{
                sql.executeUpdate(""
                        + "CREATE TABLE LOGIN("
                        + "ID INT GENERATED ALWAYS AS IDENTITY(START WITH 1, INCREMENT BY 1) PRIMARY KEY NOT NULL,"
                        + "NICK VARCHAR(15) NOT NULL,"
            + "SENHA INT NOT NULL)");
                System.out.println("Tabela criada com sucesso...");
            }catch(Exception Err){
                System.out.println("Erro ao tentar criar tabela. "+Err);
            }
            
            //INSERINDO DADOS NO JavaDB/TESTE/LOGIN
            
            try{
                sql.executeUpdate(""
                        + "INSERT INTO LOGIN (NICK,SENHA) VALUES "
                        + "('Dark',123456),"
                        + "('Goku',123),"
                        + "('Dracula',666)");
                System.out.println("Dados inseridos com sucesso...");
            }catch(Exception Err){
                System.out.println("Erro ao tentar inserir dados. "+Err);
            }
            
            //IMPRIMINDO DADOS DA TABELA JavaDB/TESTE/LOGIN... NO CONSOLE :P
            //PERBECA EM JAVA, EU POSSO DETERMINAR SE QUERO INT COMO STRING EX: ID E SENHA
            
            try{
                ResultSet get = sql.executeQuery("SELECT * FROM LOGIN");
                
                while(get.next()){                              
                    int ID = get.getInt("ID");
                    String NICK = get.getString("NICK");
                    String SENHA = get.getString("SENHA");            
                    System.out.println(ID+", "+NICK+", "+SENHA);
                    //System.out.printf("%d, %s, %s\n", ID,NICK,SENHA); //format ;D
                }
            }catch(Exception Err){
                System.out.println("Erro ao tentar imprimir dados. "+Err);
            }
            
            conn.close();
            
        }catch(Exception Err){
            System.out.println("Ocorreu um erro. "+Err);
        }
    }
}



Se quiser pode confirmar e brincar de SQL com o editor de script SQL do NetBeans.




Visualização do Banco de Dados após ter o sript executado





O próximo tutorial será bem semelhante para MySQL em Java.




Até mais!! ;D