Retornar dados em JTextField [RESOLVIDO]

Bom galera eu queria fazer uma consulta no banco e o colocar o resultado em textfield,
já tentei desse jeito porém não consegui :frowning:

[code]package apresentacao;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;

public class ConsuCliente extends JPanel {

private Connection con;
private JTable tabela;
Container container;
JButton btnConsultar;
JTextField txt;
JPanel painel,painel2;

ConsuCliente() {
	setLayout(new BorderLayout());
	painel = new JPanel();
	painel2 = new JPanel();
	txt = new JTextField(10);
	btnConsultar = new JButton("Consultar");
	painel.add(btnConsultar);
	painel.add(txt);
	add((painel),BorderLayout.NORTH);
	add(painel2);
	
	btnConsultar.addActionListener( new ActionListener() {
		public void actionPerformed(ActionEvent evt) {
			pressionouConsultar();
			//painel2.add(tabela);
		}
	});
	
}

private void pressionouConsultar()	{
	
	String url = "jdbc:odbc:Pizzaria"; 
	String usuario = "";
	String senha = "";
	try {
		Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
		con = DriverManager.getConnection(url, usuario, senha);
		
	}
	catch (Exception e) 	{
 		System.out.println("Falha na Conexão");
	}

  	Statement st;
	ResultSet res;
  	try {
   		Vector cabecalho = new Vector();
   		Vector linhas = new Vector();
   		st = con.createStatement();
   		//PreparedStatement st = con.prepareStatement("SELECT * FROM Cliente WHERE cd_Telefone=?");
   		//res = st.executeQuery("SELECT * FROM Cliente WHERE cd_Telefone='+nome+' ");
   		res = st.executeQuery("SELECT * FROM Cliente where cd_Cliente=1");
   		res.next();

   		ResultSetMetaData rsmd = res.getMetaData();
       	for (int i = 1; i <= rsmd.getColumnCount(); ++i) 
      		cabecalho.addElement(rsmd.getColumnName(i));
      			
   		do {
    		linhas.addElement(proximaLinha(res,rsmd)); 
    	} while (res.next());       
		
   		String tit = res.getString("nm_Cliente");
   		txt.setText(tit);
		
   		tabela = new JTable(linhas,cabecalho);
   		tabela.setSize(200,200);
   		JScrollPane scroller = new JScrollPane( tabela );
   		add(scroller, BorderLayout.CENTER);
   		validate();
   		st.close();
   }
	catch (SQLException sqlex) {}

}
private Vector proximaLinha(ResultSet rs, ResultSetMetaData rsmd ){
Vector LinhaAtual = new Vector();
try {
for (int i = 1; i <= rsmd.getColumnCount(); ++i)
LinhaAtual.addElement(rs.getString(i));

        }
     catch(SQLException e) {
    }
   return LinhaAtual;

}
}

[/code]

  1. Jamais faça algo como:
    catch (SQLException sqlex) {}

Fazendo isso, você ignora completamente as mensagens de erro, e nunca saberá se sua consulta está rodando corretamente. Use uma das seguintes alternativas:

catch (SQLException sqlex) { sqlex.printStackTrace(); //imprime o erro na saída de erros padrão, ou seja, no console }

catch (SQLException sqlex) { //relança a exceção sem a necessidade de captura-la throw new RuntimeException(sqlex); }

catch (SQLException sqlex) { //insira código para gravar num log aqui }

  1. Esses comandos irão adicionar uma tabela no scroll pane e o scrollpane no seu form toda vez que você clicar no botão. Acho que sua intenção era adicionar uma vez só:

JScrollPane scroller = new JScrollPane( tabela ); add(scroller, BorderLayout.CENTER);

Para resolver isso, adicione a tabela e o scroll na construção e no seu botão só mexa no model da tabela.

  1. Não use DefaultTableModel. Faça seu próprio TableModel, filho de AbstractTableModel. Veja o tópico:
    http://www.guj.com.br/posts/list/132698.java

  2. Faltou fechar sua connection, além do Statement.

valeu pelas dicas, mas esse código não é meu
copiei só pra fazer o teste do JTextField.

e eu não consegui fazer o TableModel

De qualquer jeito… o sql apresentou algum erro? Rodou bonitinho? Já tentou usar um depurador?

acho que melhorei meu código e já consigo fazer o resultado da consulta retornar no JTextField, só que agora o problema
é que ele faz a busca por código quando tento por nome não vai de jeito nenhum, sempre exibe mensagem de NAO EXISTE NADA
talvez seja algum erro no meu código java que eu não esteja enxergando.
já alterei a consulta e também consigo faze-lá por telefone.

[code]public void pressionouListar2(String parteNomeTelefone) {
try {
String url = “jdbc:odbc:Pizzaria”;
String usuario = “”;
String senha = “”;
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
Connection con = DriverManager.getConnection(url,usuario,senha);

		  if(chkNome.isSelected()){
			  PreparedStatement pst = con.prepareStatement("SELECT * FROM Cliente WHERE nm_Cliente =? ");
			  pst.setObject(1,txtNomeTelefone.getText());
			  ResultSet rs = pst.executeQuery();
			  rs.next();		
			  	if(rs.getRow() == 0){
			  		JOptionPane.showMessageDialog(null,"NAO TEM NADA");
		    
			  	}
			  	else{
			  		txt.setText(rs.getString("cd_Telefone"));
			   }				
			   pst.close();      
			   con.close();
		 }
		  else{
			  PreparedStatement pst = con.prepareStatement("SELECT * FROM Cliente WHERE cd_Cliente =? ");
			  pst.setObject(1,txtNomeTelefone.getText());
			  ResultSet rs = pst.executeQuery();
			  rs.next();		
			  	if(rs.getRow() == 0){
			  		JOptionPane.showMessageDialog(null,"NAO TEM NADA");
		    
			  	}
			  	else{
			  		txt.setText(rs.getString("nm_Cliente"));
			   }				
			   pst.close();      
			   con.close();
		  }
	     
	    }
        catch (Exception e) {
	      JOptionPane.showMessageDialog(null,"Erro, verifique: "+e.getMessage());
     }
}[/code]

Vinigodoy valeu pelas dicas, acho que consegui adaptar aquelas mensagens de erro depois do CATCH.
e outra coisa, ao inves de usar o JOptionPane para mostrar a mensagem de erro, eu poderia usar esse seu exemplo ?

catch (SQLException sqlex) { //relança a exceção sem a necessidade de captura-la throw new RuntimeException(sqlex);

Verifique se a coluna está certa. Você busca na coluna nm_Cliente, mas o seu JTextField é o txtNomeTelefone.getText(), isso está certo?

Além disso, sua pesquisa exigirá que o nome seja digitado EXATAMENTE IGUAL. Para fazer uma pesquisa relativa, geralmente é melhor usar o LIKE:

Assim a pessoa pode só digitar “João” para achar João da Silva, João Paulo, André João, etc…

está correto sim Vini, porque o que eu fiz foi o seguinte, tem 1 CheckBox lá, e você escolhe se quer pesquisar por nome ou telefone :wink:
eu não queria usar o LIKE porque como eu vou retornar em JTextField, se tiverem outras pessoas com nomes parecidos por exemplo JOSÉ ALMEIDA E JOSE BONIFACIO,
e eu digitar JOSE , ele pega o primeiro da lista que achar.
Mas vou usar o LIKE e ver se acho algum jeito de melhorar isso.

Depois que acabar esse trabalho, vou estudar JTable e Table Model, que adiantam muito a vida.