JDBC - Java Database Connectivity
Por Arthur Silva Freire
(arthur.freire@ccc.ufcg.edu.br)
Neste mês, a Coluna Java abordará uma API para acessar quaisquer dados em formato tabular que estejam armazenados em tabelas ou em arquivos. Nesta matéria, mostraremos como se conectar a um banco de dados e executar algumas instruções SQL via JDBC.

JDBC é uma API (Application Programming Interface) que torna fácil enviar instruções SQL (Structured Query Language) para os BD (Banco de Dados). Mas vai além disso, pois permite interagir com outras fontes de dados, como arquivos e fornece a interoperabilidade, ou seja, o mesmo programa escrito em Java pode acessar: Oracle, MySQL, PostgreSQL, etc.

Algumas API, de mais alto nível que a JDBC, utilizam-na como base para fornecer seus serviços. Algumas delas são: SQLJ, JDO (Java Data Objects), EJB (Enterprise Java Beans), JPA (Java Persistence API) e OLAP4J.

A seguir, algumas características de JDBC:

  • Fornece um fácil mapeamento objeto para relacional;
  • É independente do banco de dados;
  • É independente de plataforma;
  • Estabelece conexão com um banco de dados;
  • Executa comandos SQL DDL (Data Definition Language) e DML (Data Manipulation Language);
  • Recebe um conjunto de resultados;
  • Executa stored procedures;
  • Obtém informações sobre o banco de dados (metadados);
  • Executa transações.

A seguir, veja um exemplo de como se conectar a um banco de dados utilizando JDBC.

JDBCExemplo.java

import java.sql.*
 
public class JDBCExemplo {
 
        public static void main(String[] argv) {
 
                try {
                        Class.forName("Driver");
                } catch (ClassNotFoundException e) {
                        System.out.println("Cadê seu driver JDBC? Inclua-o no seu library path");
                        e.printStackTrace();
                        return;
                }
 
                System.out.println("JDBC Driver Registrado!");
                Connection connection = null;
 
                try { 
                        connection = DriverManager.getConnection("jdbc:meuDriver:meuDB", "login", "senha");
                } catch (SQLException e) {
                        System.out.println("A conexão falhou.");
                        e.printStackTrace();
                        return;
                }
 
                if (connection != null) {
                        System.out.println("Pronto, você está conectado. Tenha controle sobre sua base de dados.");
                } else {
                        System.out.println("A conexão falhou.");
                }
        }
}
Agora que você já pode se comunicar com um banco de dados, veja um exemplo de criação e inserção de dados em uma tabela utilizando JDBC.

CriandoTabelaInserindoDados.java

import java.sql.*
 
public class  {
 
       public static void main(String[] argv) {
 
               try {
                       Class.forName("Driver");
               } catch (ClassNotFoundException e) {
                       e.printStackTrace();
                       return;
               }
               Connection connection = null;
 
               try { 
                       connection = DriverManager.getConnection("jdbc:meuDriver:meuDB", "login", "senha");
               } catch (SQLException e) {
                       e.printStackTrace();
                       return;
               }
 
               if (connection != null) {
                
                       // cria um statement na conexão aberta
                       Statement stmt = connection.createStatement();
                        
                       //Criando uma tabela
                       stmt.executeUpdate(
                       "CREATE TABLE Empregado(matricula int, nome varchar(20), endereco varchar(32), salario float)");
					     
                       //Inserindo dados na tabela Empregado
                       stmt.executeUpdate(
                       "INSERT INTO Empregado values(1000, 'Biliu', 'Rua das Cruzetas, Cruzeiro, Brasil', 30.000)");
                       stmt.executeUpdate(
                       "INSERT INTO Empregado values(1001, 'Zé', 'Rua das Flores, Jardim Paulistano, ', 31.000)");
                       stmt.executeUpdate(
                       "INSERT INTO Empregado values(1002, 'Toin', 'Rua dos Carros, Liberdade, Brasil', 32.000)");
                       stmt.executeUpdate(
                       "INSERT INTO Empregado values(1003, 'Tota', 'Rua Sem Nome, Velame, Brasil', 50.000)");
               } else {
                       System.out.println("A conexão falhou.");
               }
       }
}
Veja, a seguir, uma tabela contendo o mapeamento entre tipos SQL e tipos Java.
Tipo SQLTipo Java
CHARString
VARCHARString
LONGVARCHARString
NUMERICjava.math.BigDecimal
DECIMALjava.math.BigDecimal
BITboolean
TINYINTbyte
SMALLINTshort
INTEGERint
BIGINTlong
REALfloat
FLOATdouble
BINARYbyte[]
DATEjava.sql.Date
TIMEjava.sql.Time
TIMESTAMPjava.sql.Timestamp
Tabela povoada, vamos agora selecionar os valores a inserir.

SelecionandoValores.java

import java.sql.*
 
public class SelecionandoValores {
 
        public static void main(String[] argv) {
 
                try {
                        Class.forName("Driver");
                } catch (ClassNotFoundException e) {
                        e.printStackTrace();
                        return;
                }
                Connection connection = null;
 
                try { 
                        connection = DriverManager.getConnection("jdbc:meuDriver:meuDB", "login", "senha");
                } catch (SQLException e) {
                        e.printStackTrace();
                        return;
                }
 
                if (connection != null) {
                
                        // cria um statement na conexão aberta
                        Statement stmt = connection.createStatement();
                        
                        //JDBC retorna resultados num objeto da classe ResultSet
                        ResulSet rs = stmt.executeQuery("SELECT * FROM empregado");
                        
                        //O método next() da classe ResultSet é usado para avançar o cursor para a próxima tupla no resultado:
                        while (rs.next()) {
                                int mat = rs.getInt("matricula");
                                String nome = rs.getString("nome");
                                String endereco = rs.getString("endereco");
                                float salario = rs.getFloat("salario");
                                System.out.println(mat + " - " + nome + " - " + endereco + " - " + salario);
                        }
                        
                        //As referencias às colunas da tabela também podem ser feitas com os seus indices, ou seja:
                        /*while (rs.next()) {
                                int mat = rs.getInt("matricula");
                                String nome = rs.getString("nome");
                                String endereco = rs.getString("endereco");
                                float salario = rs.getFloat("salario");
                                System.out.println(mat + " - " + nome + " - " + endereco + " - " + salario);
                        }*/
                        
                        
                } else {
                        System.out.println("A conexão falhou.");
                }
        }
}
A seguir, um exemplo mostrando como realizar updates nos dados da tabela.

FazendoUpdate.java

import java.sql.*
 
public class FazendoUpdate {
 
        public static void main(String[] argv) {
 
                try {
                        Class.forName("Driver");
                } catch (ClassNotFoundException e) {
                        e.printStackTrace();
                        return;
                }
                Connection connection = null;
 
                try { 
                        connection = DriverManager.getConnection("jdbc:meuDriver:meuDB", "login", "senha");
                } catch (SQLException e) {
                        e.printStackTrace();
                        return;
                }
 
                if (connection != null) {
                
                        // cria um statement na conexão aberta
                        Statement stmt = connection.createStatement();
                        
                        String updateString = "Update Empregado set salario = salario * 1.1 where salario < 1000.00";
                        stmt.executeUpdate(updateString);
                        
                        //Verificando o update
                        ResulSet rs = stmt.executeQuery("SELECT * FROM empregado");
                        
                        while (rs.next()) {
                                int mat = rs.getInt("matricula");
                                String nome = rs.getString("nome");
                                String endereco = rs.getString("endereco");
                                float salario = rs.getFloat("salario");
                                System.out.println(mat + " - " + nome + " - " + endereco + " - " + salario);
                        }
                } else {
                        System.out.println("A conexão falhou.");
                }
        }
}
Agora que você já foi apresentado ao JDBC, sinta-se à vontade para explorar a Documentação e realizar operações mais complexas.
Jornal PETNews - Edição: Jeymisson Oliveira - Revisão: Iago Araújo e Joseana Fechine
Grupo PET Computação UFCG, 2012. All rights reserved.