Por que eu devo ler este artigo: Neste artigo veremos como utilizar a JDBC de forma prática. Para isso, construiremos uma aplicação de Agenda de Contatos que terá uma interface simples no estilo “linha de comando”, a qual desenvolveremos utilizando a biblioteca CLI do projeto Apache Commons.
Os bancos de dados estão presentes em grande parte das aplicações que desenvolvemos e é fundamental saber como criar uma aplicação que utilize essa tecnologia. A JDBC é a API que permite construir aplicações Java para bancos de dados.
O tema é útil para a criação ou manutenção de aplicações Java que utilizem bancos de dados. Conhecer os conceitos básicos da JDBC também ajuda o desenvolvedor a entender como funcionam os frameworks ORM, como Hibernate, TopLink, etc. que serão abordados em artigos futuros.
Java Database Connectivity (JDBC) - Parte 1
Na primeira parte do nosso artigo sobre JDBC – API Java para acesso a bases de dados –, explicamos seus conceitos e arquitetura geral, vimos os tipos de drivers suportados, e mostramos, através de pequenos trechos de código, como obter uma conexão JDBC, executar um comando SQL no banco de dados e manipular os resultados. Além disso, demos início à construção de uma agenda de contatos, como exemplo prático de projeto.
Nesta segunda parte do artigo, continuaremos o desenvolvimento do nosso projeto, vendo o restante das funcionalidades, bem como a interface com o usuário, que será feita utilizando linha de comando.
O projeto exemplo: Agenda de Contatos
Como já sabemos, nosso projeto exemplo trata-se de uma Agenda de Contatos. Vamos apenas relembrar as funcionalidades que nossa aplicação irá fornecer ao usuário:
- Cadastrar nome, telefone e e-mail dos contatos;
- Editar as informações do cadastro;
- Listar os contatos;
- Obter informações detalhadas de um contato;
- Excluir um contato;
- Buscar contatos pelo nome.
A Figura 1 mostra um diagrama com as classes da nossa aplicação.

Até então, criamos uma base de dados chamada test_jdbc em cada um dos SGBDs que iremos utilizar (MySQL e PostgreSQL) e a tabela contacts. Além disso, baixamos os jars dos drivers JDBC do MySQL e PostgreSQL, e também da biblioteca Apache Commons CLI (ver URLs para download na seção Links). Por fim, criamos um projeto no Eclipse, adicionando os jars citados no Build Path, e definimos as classes Contact, ConnectionHelper, e ContactJdbcDao, além da interface IContactDao.
Como podemos perceber na Listagem 1, a classe ContactJdbcDao só está com alguns métodos implementados, exatamente como a deixamos na primeira parte do artigo. Ainda faltam as implementações dos métodos list(), search(), update() e delete(). Nas próximas seções, proveremos uma implementação para cada um desses métodos e criaremos a classe responsável pela interface de linha de comando da aplicação.
O projeto completo, incluindo o modelo de classes e script de banco, pode ser baixado diretamente do site da Easy Java.
package br.com.easyjava.examples.mycontacts.dao.jdbc; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import br.com.easyjava.examples.mycontacts.bean.Contact; import br.com.easyjava.examples.mycontacts.dao.IContactDao; public class ContactJdbcDao implements IContactDao { public Contact insert(Contact contact) { Connection connection = null; PreparedStatement statement = null; try { connection = ConnectionHelper.getConnection(); String sql = "INSERT INTO contacts (name, email, phone) VALUES (?, ?, ?)"; statement = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); statement.setString(1, contact.getName()); statement.setString(2, contact.getEmail()); statement.setString(3, contact.getPhone()); statement.executeUpdate(); ResultSet keys = statement.getGeneratedKeys(); keys.next(); long key = keys.getLong(1); keys.close(); contact.setId(key); } catch (Exception e) { throw new RuntimeException("Error inserting contact.", e); } finally { releaseDatabaseResources(statement, connection); } return contact; } public Contact get(Long id) { Contact contact = null; Connection connection = null; PreparedStatement statement = null; try { connection = ConnectionHelper.getConnection(); String sql = "SELECT * FROM contacts WHERE id = ?"; statement = connection.prepareStatement(sql); statement.setLong(1, id); ResultSet resultSet = statement.executeQuery(); if (resultSet.next()) { contact = new Contact(); contact.setId(resultSet.getLong("id")); contact.setName(resultSet.getString("name")); contact.setEmail(resultSet.getString("email")); contact.setPhone(resultSet.getString("phone")); } resultSet.close(); } catch (Exception e) { throw new RuntimeException("Error getting contact.", e); } finally { releaseDatabaseResources(statement, connection); } return contact; } public List<Contact> list() { return null; } public List<Contact> search(String name) { return null; } public void update(Contact contact) { } public void delete(Contact contact) { } private void releaseDatabaseResources(Statement statement, Connection connection) { try { statement.close(); } catch (Exception e) {} try { connection.close(); } catch (Exception e) {} } } ...