Boa Noite!!!
Abaixo segue o meu código e abaixo do código esta minha dúvida com relação ao erro.
private void jTablePessoasMouseClicked(java.awt.event.MouseEvent evt) {
String nome_pessoa = “”+jTablePessoas.getValueAt
(jTablePessoas.getSelectedRow(), 1);
conexao.abreConexao();
conexao.executaSQL(“select * from tblpessoa where pes_nome=’”+nome_pessoa+"’");
try {
conexao.rs.first();
txtPesCodigo.setText(Integer.toString(conexao.rs.getInt(“pes_codigo”)));
txtPesNome.setText(conexao.rs.getString(“pes_nome”));
txtPesCpf.setText(conexao.rs.getString(“pes_cpf”));
txtPesRg.setText(conexao.rs.getString(“pes_rg”));
txtPesRua.setText(conexao.rs.getString(“pes_rua”));
txtPesComplemento.setText(conexao.rs.getString(“pes_complemento”));
txtPesNumero.setText(conexao.rs.getString(“pes_numero”));
Conexao conexaoPesquisa = new Conexao();
conexaoPesquisa.abreConexao();
conexaoPesquisa.executaSQL(“select * from tblcidade where cid_codigo=”+conexao.rs.getInt(“tblpessoa.cid_codigo”));
conexaoPesquisa.rs.first();
CBPesCid.setSelectedItem(conexaoPesquisa.rs.getString(“cid_nome”));
conexaoPesquisa.fechaConexao();
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null,“Erro ao selecionar os dados”
+ex.getLocalizedMessage(),“Mensagem”,JOptionPane.ERROR_MESSAGE);
}
}
Todo o CRUD está funcionando, porém quando é carregada a interface na tela do computador, a tabela lista os dados e quando vou fazer o uso do evento MouseClicked ele retorna um erro, “Erro ao selecionar os dados ResultSet não está posicionado corretamente, talvez precise chamar o next”, só que já tentei trocar os dois, já tentei trocar a ordem e nada resolve, não sei mais o fazer, já tentei também trocar os nomes das colunas nos métodos e no banco mais nada resolve.
Toda vez que tento usar o método ele cai direto no catch, ele não entra no try como deveria acontecer.
CBPesCid.setSelectedItem(conexaoPesquisa.rs.getString(“cid_nome”));
Tira a conexãoPesquisa
.
Deixa só o rs.getString(“nomeCampoNaTabelaExatamenteIgual”);
Se o nome do campo, lá na sua tabela, estiver com letras maiúsculas (camelCase) você DEVE especificar o rs.getString()
da mesma forma. Entendeu?
Outra coisa:
CBPesCid.setSelectedItem(conexaoPesquisa.rs.getString(“cid_nome”));
É setSelectedItem() mesmo? Tentei aqui e não funcionou. Será que o addItem() não resolve pra vc?
Tenta aí e se der outro erro, informa a gente.
Um exemplo que tenho aqui…
Na view:
private void popularComboPessoa(){
cbxPessoa.removeAllItems();
cbxPessoa.addItem("Selecione...");
pessoas = dao.Pessoa.pesquisar();
for(bean.Pessoa pessoa : pessoas){
if(pessoas.size() <= NUMERO_MINIMO_REGISTROS)
cbxPessoa.setMaximumRowCount(pessoas.size()
+ NUMERO_MINIMO_REGISTROS);
else
cbxPessoa.setMaximumRowCount(pessoas.size());
cbxPessoa.addItem(pessoa.getNomePessoa());
}
}
No DAO:
package dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import util.ConectaBancoDeDados;
import util.TransacaoBancoDados;
/**
*
* @author JFSJUNIOR
*/
public class Pessoa {
private static final int NULO = 0;
private static final int CAMPO_PK = 1;
public static int inserir(bean.Pessoa pessoa) throws SQLException{
int idPessoa = NULO;
Connection conectaBancoDeDados = TransacaoBancoDados
.abrirTransacao();
try{
String stringSQLInsercao = "INSERT INTO Pessoas(nome_pessoa) "
+ "VALUES(?)";
try(PreparedStatement pstmt = conectaBancoDeDados
.prepareStatement(stringSQLInsercao,
PreparedStatement.RETURN_GENERATED_KEYS)){
pstmt.setString(1, pessoa.getNomePessoa());
pstmt.execute();
try(ResultSet rstSet = pstmt.getGeneratedKeys()){
if(rstSet != null){
rstSet.next();
idPessoa = rstSet.getInt(CAMPO_PK);
}
}
}
}catch(SQLException sqle){
TransacaoBancoDados.desfazerTransacao();
System.out.println("ERRO[" + Pessoa.class.getName()
+ " - inserção]: " + sqle.getMessage());
}
return idPessoa;
}
public static void atualizar(bean.Pessoa pessoa) throws SQLException{
Connection conectaBancoDeDados = TransacaoBancoDados
.abrirTransacao();
try{
String stringSQLAtualizacao = "UPDATE Pessoas SET nome_pessoa = ? "
+ "WHERE id_pessoa = ?";
try(PreparedStatement pstmt = conectaBancoDeDados
.prepareStatement(stringSQLAtualizacao)){
pstmt.setString(1, pessoa.getNomePessoa());
pstmt.setInt(2, pessoa.getIdPessoa());
pstmt.executeUpdate();
}
}catch(SQLException sqle){
TransacaoBancoDados.desfazerTransacao();
System.out.println("ERRO[" + Pessoa.class.getName()
+ " - atualização]: " + sqle.getMessage());
}
}
public static void excluir(bean.Pessoa pessoa) throws SQLException{
Connection conectaBancoDeDados = TransacaoBancoDados
.abrirTransacao();
try{
String stringSQLExclusao = "DELETE FROM Pessoas "
+ "WHERE Pessoas.id_pessoa = ?";
try(PreparedStatement pstmt = conectaBancoDeDados
.prepareStatement(stringSQLExclusao)){
pstmt.setInt(1, pessoa.getIdPessoa());
pstmt.executeUpdate();
}
}catch(SQLException sqle){
TransacaoBancoDados.desfazerTransacao();
System.out.println("ERRO[" + Pessoa.class.getName()
+ " - exclusão]: " + sqle.getMessage());
}
}
public static List<bean.Pessoa> pesquisar() throws SQLException{
List<bean.Pessoa> pessoas = new ArrayList<>();
try(Connection conectaBancoDeDados = ConectaBancoDeDados.getConexao()){
String stringSQLPesquisa = "SELECT * FROM Pessoas";
try(PreparedStatement pstmt = conectaBancoDeDados
.prepareStatement(stringSQLPesquisa)){
try(ResultSet rstSet = pstmt.executeQuery()){
while(rstSet.next()){
bean.Pessoa pessoa = new bean.Pessoa();
pessoa.setIdPessoa(rstSet.getInt("id_pessoa"));
pessoa.setNomePessoa(rstSet.getString("nome_pessoa"));
pessoas.add(pessoa);
}
rstSet.close();
}
pstmt.close();
}
conectaBancoDeDados.close();
}
return pessoas;
}
}
Onde:
cbxPessoas
é o JComboBox
.
NUMERO_MINIMO_REGISTROS
é uma contante que vale 3. Caso o número de pessoas seja igual ou menor que três, a popup
do JCombBox
fica muito pequena. Daí, nesse caso eu faço ela expandir para mais de 3 ao somar o tamanho da lista de pessoas com a constane.
É uma boa prática separar a camada de visão/apresentação (view
) da camada de persistência (DAO), ou seja, da manipulação da conexão e manipulação do BD.