Consulta em banco de dados PostGreeSql

5 respostas
R

Bom dia a todos, estou tendo um grande problema em fazer consulta no banco de dados.
Estou estudando java por minha conta, estou trabalhando com Swing e Eclipse utilizando o banco PostGreeSql.
No evento lostFocus do meu Jtext, preciso enviar os dados dele para ser executada uma consulta para validar a Primary Key.
Preciso que ao ser validada esta Pk, ela me retorne os dados e popule minha JTable.
Estou usando MVC, tenho Listener de cliente (onde está a Pk), um Listener de produtos.
na classe panel dados, tenho um ForEach que roda meus listener para executar a consulta
Como posso executar essa consulta?
Segue código abaixo

public class PanelDadosContaCorrente extends JPanel {

	private static final long serialVersionUID = 1L;
	//ArrayList do listener DadosContaCorrente
	private ArrayList<DadosContaCorrente> listeners = new ArrayList<DadosContaCorrente>();
	private ContaCorrenteTO contaCorrente;
	
	private JTextField getCod_clientefkField() {
		if (cod_clientefkField == null) {
			cod_clientefkField = new JTextField();
			cod_clientefkField.setToolTipText("Informe o código do cliente.");
			cod_clientefkField.addFocusListener(new FocusAdapter() {

				// TODO consulta PanelDados
				public void focusLost(FocusEvent e) {
					String valor = cod_clientefkField.getText();
					int codigo = Integer.parseInt(valor);
					//FOREACH para chamar o listener contacorrente e executar a consulta
					//não entra
					for (DadosContaCorrente listener : listeners) {
						listener.consultarClientePk(codigo);
						
					}
					//doConsultaFieldFocusLost();
				}
			});

		}
		return cod_clientefkField;
	}

}

public class ContaCorrenteDAO {	
	public ClienteTO consultarClientePk(int cod_cliente) throws DAOException{
		Connection conn = null;
		PreparedStatement ps = null;
		
		try {
			conn = getConnection();
			String sql = "SELECT * FROM cliente WHERE codigo = ?";
			
			ps = conn.prepareStatement(sql);
			ps.executeQuery();
			
			ps.close();
		} catch (SQLException e) {
			throw new DAOException("Código não encontrado" + e.getMessage());
		}
		return null;
		
		
	}

}


public interface DadosContaCorrente {
	
	public void dadosCancelados();
	public void dadosContaCorrente(ContaCorrenteTO contaCorrente);
	public void consultarClientePk(int cod_cliente);

}

5 Respostas

marcoslogan

Olha me responde uma coisa, a tua classe ContaCorrentDAO, tem o método ConsultarClientePk que tem como parâmetro de entrada o código do cliente mas a tua query vc colocou assim:

String sql = "Select * from cliente Where Codigo = ?";

   //Já na outra linha ao invés de vc fazer assim.
   ps.setInt(1, cod_cliente);
    //vc faz assim.
    ps = conn.preparedStatement(sql);
    ps.executeQuery();

O método está incompleto.

vc tem que retornar um objeto do tipo ClienteTO declare uma variável do tipo ClienteTo e coloque um valor inicial…

public ClienteTO consultarClientePk(int cod_cliente)throwsDAOException{
      Connection conn = null;
      String Query = "Select * from cliente Where Codigo = ?";
      PreparedStatement smt = con.preparedStatement(Query);
      ClienteTo cliente = null;
      try{
           smt.setInt(1, cod_cliente);
           
           ResultSet set = smt.executeQuery();

           if(set.next()){
              cliente = new ClienteTO();
              cliente.setCodigo(set.getInt("Codigo"));
              cliente.setNome(set.getString("Nome"));//e assim por diante
           }
      }catch(SQLException exe){
            throw new DAOException("");
      }finally{
          conn.close;
          smt.close;
      }
      return cliente;

   }

Deixa assim. Vai resolver o teu problema.

nel

Bom dia.

Dois detalhes.

1 - Nunca vai entrar no foreach desta forma, afinal, não estou vendo onde você popula seu ArrayList, você simplesmente está instanciando ele mas não está atribuindo nenhum valor, logo, sua Lista será vazia e não vai entrar no for.

2 - Esta linha: String Query = "Select * from cliente Where Codigo = ?";
Remova o ‘*’, pelo o que eu sei o Java não interpreta esta linha, se deseja pegar todos os campos faça na mão, ou seja:

String query = "Select codigo, nome from cliente where codig = ? ";

Não sei se são exatamente esses os nomes das suas colunas na sua database mas entendeu não é?
Abraços! :slight_smile:

R

cara, não consegui, continua não entrando no ArrayList para executar a consulta.
não sei mais o que fazer
por algum motivo ele não entra no ArrayList e consequentemente não executa a consulta

nel

É como eu disse meu caro amigo, você não está populando sua List, ou seja, ela está vazia! Se o conteúdo de sua ArrayList for vazio é lógico que não vai entrar no seu for! Popule sua lista e ai sim faça o for!

Algo como:

listeners.add(dadosContaCorrente);

Supondo lógico, que este objeto esteja preenchido.
É por ai.

Abraços.

R

deu certo, obrigado a todos, será que poderiam me dizer como carregar os dados no Jtable?, valeu…
Mais uma coisa que acabei esquecendo, no meu Frame tenho um JtextBox que receberá o nome do cliente, como posso pega-lo com os dados retornados da consulta?
Tem como colocar o nome em um JLabel no Frame…
Muito obrigado a todos.

Criado 24 de novembro de 2009
Ultima resposta 24 de nov. de 2009
Respostas 5
Participantes 3