domingo, 2 de agosto de 2015

Criando e Manipulado Banco de Dados Local e Servidor Derby em Java

Posted by Luiz Renato on 20:40

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 é 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.*> Arquivo > Novo Projeto > Java > 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 isso de dentro do seu NetBeans ou download do Site do Apache Derby. Para importação offline, vc clica com o botão direito em Bibliotecas > Adicionar Biblioteca > importar > Driver JDBC do Java DB, com isso ele vai importar o pacote Derby.jar, Derbycliente.jar e Derbyweb.jar. Para este tutorial você só precisa do Derby.jar.  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 import java.sql.*; que é uma importação padrão, porém o "*" quer dizer que quero usar todas a classes do java.SQL,
  • Try/Catch será 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 pode ser incrementada com uma variável pra armazenar o erro ex: (Exception Err), Err vai ser a variável. 
  • Criei um objeto(conn) que estabeleceu uma conexão com o Embedded Driver "org.apache.derby.jdbc.EmbeddedDriver" através do Derby.jar  usando a String "jdbc:derby:.\\LocalDB;create=true;" como parâmetros para criar o Banco de dados Local DB. (pode copiar, é código!).

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(); Se for para ler você substitui por executeQuery(); através de um looping para poder obter dados da matriz table.

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 String "jdbc:derby://host:port//DB;user=?;password=?"
  • Observe que em Servidor é ainda mais simples, não precisa da class embedded driver.

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.* > selecione a aba "Serviços" > expanda "Bancos de Dados" > clique com o botão direito em "Java DB" > Iniciar Servidor e depois > 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...

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

1 comentários:

Postar um comentário

  • RSS
  • Delicious
  • Digg
  • Facebook
  • Twitter
  • Linkedin

Procurar