A classe demonstra dois métodos importantes, update (inclusão, alteração, exclusão) e query (pesquisas), que são responsáveis por realizar instruções SQL no banco. Os resultados obtidos através de consultas são armazenados em dois vetores (linhas e colunas), que por sua vez são criados na classe VetorPesquisa, que encapsula os atributos para acessos posteriores.
Classe Conexao.java:
import java.sql.*;
import java.util.Vector;
/** Modelo de conexão como o banco de dados.
* Código extraído da documentação oficial do HSQLDB. Com algumas alterações para
* acoplar os resultados da consultas em vetores java (Vector)
* Procedimentos padrões para consulta e updates através de expressões SQL.
*
* @author Rondson
*
*/
public class Conexao {
Connection conn; // conexão
/** Abre conexão com o banco ao instanciar-se um objeto do tipo Conexao */
public Conexao() throws Exception {
Class.forName("org.hsqldb.jdbcDriver"); // carrega driver
// carrega banco de dados
conn = DriverManager.getConnection("jdbc:hsqldb:"
+ "hsql://localhost/data/SRH/", // filenames
"sa", // username
""); // password
} // construtor Conexao
/** Fecha conexão com o banco. */
public void fecharConexao() throws SQLException {
conn.close(); // encerraConexão
} // void fecharConexao
/** Executa comandos SQL (CREATE, DROP, INSERT e UPDATE). */
public synchronized int update(String expression) throws SQLException {
Statement st = null;
st = conn.createStatement(); // statements
int i = st.executeUpdate(expression); // executa Updates
st.close();
return i;
}
/** Realiza consultas no banco (SQL SELECT). */
public synchronized void query(String expression, VetorPesquisa vetor) throws SQLException {
Statement st = null;
ResultSet rs = null; // manipula os dados obtidos numa consulta
st = conn.createStatement();
rs = st.executeQuery(expression); // executa consultas
armazenarDados(rs, vetor); // armazena dados em vetores
st.close(); // fecha Statement
} // void query
/** Armazena resultados da consulta em vetores para o método query(). */
public void armazenarDados(ResultSet rs, VetorPesquisa vetor) throws SQLException {
// vetores locais para armazenar os dados
Vector colunas = new Vector();
Vector linhas = new Vector();
ResultSetMetaData rsmd = rs.getMetaData(); // Armazena informações sobre o banco de dados e a consulta
// Construção dos cabeçalhos das colunas, quantas existirem.
for (int i = 1; i <= rsmd.getColumnCount(); ++i)
colunas.addElement(rsmd.getColumnName(i));
// Construção das linhas
for(; rs.next(); ) { // posiciona no primeiro registro e percorre até não encontrar registros
linhas.addElement(proximaLinha(rs, rsmd));
}
// Seta os vetores da classe VetorPesquisa
vetor.setColunas(colunas);
vetor.setLinhas(linhas);
} //void armazenaDados
/** Este método tem por finalidade percorrer a tabela, usando as informações obtidas no loop anterior.
* Além de verificar o tipo de elemento que há na linha da tabela.
*
* @param rs
* @param rsmd
* @return
*/
private Vector proximaLinha(ResultSet rs, ResultSetMetaData rsmd){
Vector LinhaAtual = new Vector();
// Verifica o tipo de elemento a ser adicionado no vetor
try{
for (int i = 1; i <= rsmd.getColumnCount(); ++i)
switch(rsmd.getColumnType(i)){
case Types.VARCHAR: LinhaAtual.addElement(rs.getString(i));
break;
case Types.TIMESTAMP: LinhaAtual.addElement(rs.getDate(i));
break;
case Types.NUMERIC: LinhaAtual.addElement(new Long(rs.getLong(i)));
break;
case Types.INTEGER: LinhaAtual.addElement(new Integer(rs.getInt(i)));
break;
case Types.REAL: LinhaAtual.addElement(rs.getFloat(i));
break;
}
}
catch(SQLException e){
}
return LinhaAtual;
} // Vector proximaLinha
} // classe Conexao
Classe VetorPesquisa.java:
import java.util.Vector;
/** Esta classe é responsável por amarzenar em linhas e colunas, os
* resultados obtidos através de consultas no banco
*/
public class VetorPesquisa {
// Vetores para captura dos valores de linhas e colunas
private Vector colunas = new Vector();
private Vector linhas = new Vector();
// Encapsulamento dos Vetores para posterior acesso por outras classes
public Vector getColunas() {
return colunas;
}
public void setColunas(Vector colunas) {
this.colunas = colunas;
}
public Vector getLinhas() {
return linhas;
}
public void setLinhas(Vector linhas) {
this.linhas = linhas;
}
}
Com o armazenamento dos resultados capturados no banco de dados, em vetores, é possível criar tabelas e passar como parâmetro os vetores "linhas" e "colunas".
Em breve vou publicar um tutorial de como manipular os dados obtidos, para exibição em tabelas utilizando a interface gráfica através da API Swing.
Um comentário:
Bacana Rondson. Parabéns por dividir o conhecimento. abraço
PC
Postar um comentário