JDBC Statement
Por Rafael da Silva
(carlos.rafael.silva@ccc.ufcg.edu.br)
Neste tutorial, aprenda como fazer uma conexão com banco de dados e uma query utilizando JDBC.

Java Database Connectivity, ou JDBC, é uma API em Java que faz o envio de instruções SQL para qualquer banco de dados relacional. Para cada banco de dados existe um driver JDBC. Neste tutorial abordaremos como realizar uma conexão com banco de dados MySQL utilizando JDBC e como realizar uma query simples. Utilizaremos o MySQL, mas você pode usar qualquer banco de dados de sua preferência.

O pacote utilizado será o java.sql. É possível observar que a maioria das classes da biblioteca são apenas inferfaces. Desta maneira, a implementação da classe fica por conta do programador, que deverá entender a tecnologia em questão, nesse caso, o MySQL. Java não possui drivers para conexão com banco de dados, dessa forma, novas versões de drivers vão surgindo a medida que novos banco de dados são lançados. O driver conector desenvolvido para o banco MySQL pode ser baixado na página do MySQL. A versão do JAR utilizada no tutorial é o mysql-connector-java-5.1.24-bin.


Adicionando a API

Crie uma pasta chamada lib e adicione o JAR do driver ao build path do projeto.

Para carregar o driver em Java é necessário utilizar o método estático Class.forName(), que irá registrar a classe como um driver JDCB.

Class.forName("com.mysql.jdbc.Driver"); //nome do driver no parâmetro


Abrindo uma conexão

Após isso, podemos abrir uma conexão com o banco de dados criado, passando uma String de conexão.

//
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/tutorial","root","123456"); 


Observe que o nome do banco de dados no MySQL é tutorial. O login do banco é root e a senha é 123456. Durante a execução do código, o java.sql.DriverManager tentará abrir uma conexão com o banco, que só será possível caso a String dada como parâmetro seja aceita pelo DriverManager.


Criando o Banco de Dados

Caso queira criar uma banco exatamente como o do exemplo execute as seguintes querys no seu MySQL Workbench. Caso ainda não possua o MySQL Server ou o Workbench, ambos podem ser baixado no pacote MySQL Installer.

CREATE DATABASE tutorial;
create table ALUNO ( 
id INT NOT NULL auto_increment, 
primeiro_nome VARCHAR(20) default NULL, 
ultimo_nome VARCHAR(20) default NULL, 
nascimento DATE default NULL, 
PRIMARY KEY (id)
); 

O Statement

Agora devemos utilizar o método Connection.createStatement(), que retorna um objeto Statement, que representa uma Query.

Statement stm = conn.createStatement();  

Para fazer um SELECT, é necessário utilizar o método Statement.executeQuery(), pois ele retornará um ResultSet, ou seja, uma coleção, que contém o resultado da pesquisa.

//
ResultSet rs = stm.executeQuery("SELECT primeiro_nome, ultimo_nome, nascimento FROM aluno ");

Caso a query fosse algo que não retorna nada, como um INSERT ou UPDATE, deve-se utilizar o Statement.executeUpdate().

			
			/*o método next() move o ponteiro que itera sobre os elementos da coleção,
			 *  começando da linha anterior à primeira,
			 *   até a ultima linha, quando retornará false*/
			while(rs.next()){ 
			String coluna1 = rs.getString(“primeiro_nome”);
			String coluna2 = rs.getString(“ultimo_nome”);
			Date coluna3 = rs.getDate(“nascimento”);
			}

Depois de termos um ResultSet atribuído à variável ‘rs’, podemos iterar sobre ele utilizando o método next.

Observe que o métodoClass.forName() lança uma exceção caso a classe do driver não seja encontrada, ou seja, ClassNotFoundException. Note também que DriverManager.getConnection() lança uma SQLException, por esse motivo, os método devem vir acompanhados de um bloco try/catch ou uma de uma declaração de lançamento de exceção no método em que for utilizada.


Um exemplo de método que faz SELECT numa tabela específica seria:

public static void listarAlunos() {
                
                try {
                        Class.forName("com.mysql.jdbc.Driver");
                        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/tutorial","root", "123456");
                        Statement stm = conn.createStatement();
                        ResultSetrs = stm.executeQuery("SELECT primeiro_nome, ultimo_nome, nascimento FROM aluno");
                        while(rs.next()){
                                System.out.println(
                                rs.getString("primeiro_nome")+' '+
                                rs.getString("ultimo_nome")+' '+
                                rs.getDate("nascimento")
                                                );
                                
                        }
                        conn.close();
                        
                } catch (ClassNotFoundException e) {
                        System.err.println("Driver JDBC nãoencontrado");
                        e.printStackTrace();
                } catch (SQLException e) {
                        e.printStackTrace();
                } 
                
                
        }

Note que java.sql.ResultSet têm uma série de métodos para que você possa manipular o valor da coluna para o tipo desejado, como int, String, Date, double e etc.

Nesse tutorial fizemos uma abordagem que utiliza códigos SQL dentro de classes escritas em Java. Nas próximas edições dessa coluna, serão tratadas as melhores abordagens de como manipular um Banco de Dados, como guardar as queries dentro de um arquivo de configuração .xml ou .properties. Deste maneira, caso haja uma migração de banco de dados, pode-se facilmente mudar as queries que não são compatíveis sem refatorar o código.

Este tutorial foi baseado no tutorial do Vogella, que pode ser acessado nesta página.

Jornal PETNews - Edição: Jessika Renally - Revisão: Tiaraju Smaneoto e Lívia Sampaio
Grupo PET Computação UFCG, 2013. All rights reserved.