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.
- *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)
- 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 |
|
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 |
|
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