Вы находитесь на странице: 1из 7

Manipulando Banco de Dados (MySql)

com Interface Grafica (Java Swing) Parte 2


A Primeira parte dessa matria cobriu a parte de insero de dados, logo,
a segunda parte destina-se a funo de listar os dados armazenados, exibindo
em uma tabela ( JTable ). Agora vamos construir uma janela que exiba uma
tabela, segue um exemplo logo abaixo:
Mecanismo para manipular os dados na tabela.
Para adicionar uma linha na tabela acima, deve-se fornecer as
informaoes na seguinte condio:
novaLinha = [nome", telefone", rg", cpf"]
Ou seja, um registro armazenado em um vetor. Vamos ento criar um
registro ficticio:

java.util.Vector registro1 = new java.util.Vector<String>();
registro1.add("Ivan");
registro1.add("tel");
registro1.add("rg");
registro1.add("cpf");
A forma de manipular as informaoes na tabela atravs do DataModel,
cada tabela tem um modelo, onde os dados so adicionadas ou removidas.
Deve-se obter o modelo da tabela criada da seguinte forma:
DefaultTableModel dtm = (DefaultTableModel) jTable1.getModel();

Para inserir os dados basta invocar o mtodo addRow() e passar como
parmetro o vetor do registro.
dtm.addRow(registro1);
Temos o seguinte resultado:
Para que seja possivel exibir na tabela as informaoes armazenadas no
banco de dados, preciso primeiramente realizar uma consulta a base,
selecionando todos os registros adicionados anteriormente. Para isso utiliza-se
um java.sql.ResultSet.
O ResultSet responsavel em selecionar registros em um consulta ao
bando de dados. Com ele podemos obter os dados inseridos em uma tabela
MySql. A listagem abaixo demonstra como utiliza-lo.
//Faz Conexo
String query = "SELECT * FROM Cliente ;


try{
java.sql.Statement stmt = this.con.createStatement();
java.sql.ResultSet rs = stmt.executeQuery(query);

while(rs.next()){
String nome = rs.getString("nome");
String telefone = rs.getString("telefone");
String rg = rs.getString("rg");
String cpf = rs.getString("cpf");
}
//Fecha Conexo
*Obs.: Caso a coluna seja do tipo integer, deve-se utilizar:
rs.getInt(nomeColuna)
Mais detalhes:
Cria o ResulSet, responsavel em fazer a leitura dos registros armazenados
no banco. O ResultSet executa a instruo SQL que a String query representa.

java.sql.ResultSet rs = stmt.executeQuery(query);
Atribui a variavel nome o valor da coluna nome, proveniente da leitura
do registro.
String nome = rs.getString("nome");
Lao de repetio que faz a leitura de todos os registros selecionados pela
instruo SQL. Em outras palavras, enquanto houver registros, execute o
codigo abaixo.
while(rs.next()){}
Na listagem anterior, realizava-se a leitura de todos os registros
armazenados no banco, atravs do codigo while(rs.next()), mas deve-se
armazenar esses registros lidos de uma forma mais adequada que a apresentada.
Proponho armazenar os registros da seguinte maneira:
Construir um vetor para armazenar cada registro, adicionar em um outro
vetor que contenha todos os outros registros, ou seja, um vetor de vetores ou
matriz.
nome
telefone
rg
cpf
Vamos modificar o codigo para que a listagem trabalhe com essa nova
estrutura de armazenamento.
Vector dados = new Vector<Vector>()
while(rs.next()){
//criar um vetor para cada registro lido
Vector registroAtual = new Vector<String>()
//ler o registro do banco de dados
String nome = rs.getString("nome");
String telefone = rs.getString("telefone");
String rg = rs.getString("rg");
String cpf = rs.getString("cpf");
//armazenas as informacoes no vetor do registro
registroAtual.add(nome);
registroAtual.add(telefone);
registroAtual.add(rg);
registroAtual.add(cpf);
//adicionar o vetor de registro ao vetor principal
dados.add(registroAtual)
}
O codigo acima realiza uma consulta no banco de dados, obtm todos os
registros armazenados no tabela Cliente, e armazena as informaoes na forma
de uma matrix. Agora resta apenas inserir na 3Table, para que os dados sejam
exibidos, para isso vamos manipular a matriz da seguinte forma:
DefaultTableModel dtm = (DefaultTableModel)
jTable1.getModel();

for( int i = 0; i < dados.size(); i++){
dtm.addRow( dados.get(i) );
}
O codigo acima adiciona na 3Table todos os vetores presentes no vetor de
dados, que representa a matriz.
Para finalizar, vamos inserir todo o codigo em um mtodo para ser
chamado na com a construo da janela:
public void carregarTabela() {
java.util.Vector<Vector> dados = new java.util.Vector<Vector>();
//fazer a conexao com o mysql
java.sql.Connection con;
try {
Class.forName("org.gjt.mm.mysql.Driver");
con = java.sql.DriverManager.getConnection(
"jdbc:mysql://localhost:3306/bd_aulas", "aula", "123");
} catch (Exception e) {
e.printStackTrace();
throw new java.lang.RuntimeException("erro ao conectar");
}
String query = "SELECT * FROM Cliente";
try {
java.sql.Statement stmt = con.createStatement();
java.sql.ResultSet rs = stmt.executeQuery(query);
while ( rs.next() ) {
java.util.Vector registroAtual = new java.util.Vector();
String nome = rs.getString("nome");
String telefone = rs.getString("telefone");
String rg = rs.getString("rg");
String cpf = rs.getString("cpf");
registroAtual.add(nome);
registroAtual.add(telefone);
registroAtual.add(rg);
registroAtual.add(cpf);
dados.add(registroAtual);
}
} catch (java.sql.SQLException e) {
throw new java.lang.RuntimeException("erro na selecao");
}
//Fechando a Conexo:
try {
con.close();
} catch (Exception e) {
e.printStackTrace();
throw new java.lang.RuntimeException("erro fechar");
}
DefaultTableModel dtm = (DefaultTableModel) jTable1.getModel();
for (int i = 0; i < dados.size(); i++) {
dtm.addRow(dados.get(i));
}
}
Consideraes:
Foi apresentado o componente JTable, usado para exibir registros
armazenados no banco de dados. Toda JTable possui um modelo, que
responsavel pela atualizao de seus registros. Qualquer alterao na tabela
deve ser manipulado atravs do modelo. O Vetor a estrutura utilizada para
representar o formato do registro a ser inserido na JTable.
O ResultSet foi demonstrado, juntamente com a funo de leitura dos
dados campos da tabela do banco de dados. ResulSet responsavel por realizar
uma consulta SQL.
Manipula-se as informaoes por meio de matrizes, pois facilita a
representao das informaoes obtidas do banco de dados.
Ainda temos os mesmos problemas apresentados na parte 1 desse
material.
Ivan Salvadori
Escrito em Junho de 2010

Вам также может понравиться