Persistência de dados com JDBC
A persistência de dados refere-se ao armazenamento não-volátil de dados, por exemplo, o armazenamento num dispositivo físico como um disco rígido.
Por outras palavras, pode-se dizer que a persistência consiste em manter os dados num meio físico recuperável, como uma base de dados ou ficheiro, de modo a garantir a permanência das informações do estado de um objeto lógico.
No desenvolvimento de uma aplicação que prevê persistência, depois de criadas as classes de negócio passa-se à implementação dos métodos de acesso e persistência dos dados na base de dados.
O padrão de arquitetura MVC não cita especificamente a camada de acesso aos dados, porque subentende-se que estes métodos estariam encapsulados pelo Model.
O JDBC (Java Database Connectivity) é uma API incluída na linguagem Java para o acesso à bases de dados. Esta API consiste num conjunto de classes e interfaces escritas em Java e oferecem todos os recursos necessários para a programação com base de dados.
Para se fazer a conexão, é necessário adicionar o Driver JDBC relativo ao sistema de gestão de base de dados a ser utilizado. O driver JDBC é a ponte necessária para a conexão com a base de dados.
No caso da aplicação em desenvolvimento neste E-book, o Sistema de Gestão de Base de Dados a utilizar é o MYSQL e portanto será necessário o MYSQL JDBC Driver. O NetBeans possui suporte nativo para este driver e portanto apenas é necessário adicionar o driver ao projeto.
Adição do MYSQL JDBC Driver
Para adicionar o MYSQL JDBC Driver faz-se clique com o botão direito do mouse sobre o projeto e escolhe-se a opção Properties(Propriedades) em Categories(Categorias) selecionar-se Libraries(Bibliotecas) e depois faz-se clique sobre o botão Add Library(Adicionar biblioteca). Se a libraria não estiver disponível fazer cliquem em Import Library e procurar a livraria na lista e depois fazer clique sobre o botão Import Library , Add Library, sucessivamente e depois fazer clique no botão OK.
Conexão com a base de dados
A programação do acesso e das operações de uma aplicação Java com uma base de dados relacional envolve as seguintes atividades:
Habilitar o driver JDBC na aplicação
Estabelecer a conexão entre a aplicação e o servidor de base de dados
Montar as instruções SQL desejadas.
Para criar a conexão com a base de dados da aplicação em desenvolvimento, será utilizado o padrão Connection Factory que define uma única classe que proverá uma fábrica de conexão com a aplicação.
Esta classe será responsável por abrir e fechar a conexão com a base de dados.
Para o projeto em desenvolvimento será criada uma classe com dois métodos, um para abrir e outro para fechar a conexão com a base de dados.
Para a abertura da conexão será criado o método getConnection(), que não recebe nenhum parâmetro e retorna um objeto Connection do pacote java.sql.
Para efetivar esta abertura o método personalizado utilizará o método getConnection() da interface DriverManager que recebe a URL, o utilizador e a password de acesso à base de dados.
Para fechar a base de dados será criado o método closeConnection() que receberá um objeto to tipo Connection e para em seguida fecha-o. O método closeConnection() será sobrecarregado de modo a implementar a possibilidade de fechar também objetos do tipo PreparedStatement e ResultSet.
A partir da conexão é possível interagir com a base de dados, fazendo consultas, atualização e outros tipos de operações.
Para o projeto em construção a classe Conexao.java, responsável por estabelecer e manter a conexão com a base de dados, será colocada no package org.ao.mirangol.util.
package org.ao.mirangol.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
*
* @author informatica
*/
public class Conexao {
public static Connection getConnection() {
Connection con;
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/mirangol";
String user = "root";
String password = "root";
try {
Class.forName(driver);
con = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException | SQLException ex) {
System.err.println("Erro na conexao com a base de dados: " + ex.getMessage());
return null;
}
return con;
}
public static void closeConnection(Connection conn){
close(conn, null, null);
}
public static void closeConnection(Connection conn, PreparedStatement ps){
close(conn, ps, null);
}
public static void closeConnection(Connection conn, PreparedStatement ps, ResultSet rs){
close(conn, ps, rs);
}
private static void close(Connection conn, PreparedStatement ps, ResultSet rs) {
try {
if (rs != null) {
rs.close();
}
if (ps != null) {
ps.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException ex) {
System.err.println("Erro ao desalocar recurso: "+ex.getMessage());
}
}
}