Boa madrugada!
Dúvida:
Estou tentando passar o texto digitado em um JTextField, para uma String, para usar em um select:
String texto = tfnome.getText();
String query = "SELECT *FROM agenda WHERE nome ='"+texto+"'";
O que está errado?
Boa madrugada!
Dúvida:
Estou tentando passar o texto digitado em um JTextField, para uma String, para usar em um select:
String texto = tfnome.getText();
String query = "SELECT *FROM agenda WHERE nome ='"+texto+"'";
O que está errado?
tente assim
String query = "SELECT * FROM TABELA WHERE CAMPO = " + field.getText();
se não me engano ele vem com aspas! não testei, mas se num vier tente isso!
String query = “SELECT * FROM TABELA WHERE CAMPO = “” + field.getText() + “””;
axo que deve te ajudar;
O ideal mesmo é usar um prepared statement.
Aí vc deixa sua query assim:
Isso impede também do usuário (um hacker) dizer que o nome é:
E fazer o seu SQL retornar todos os usuários do banco. Mais informações:
http://www.guj.com.br/java.tutorial.artigo.115.1.guj
Bom, já tinha visto algo sobre prepared statement;
Acabei de ler o tutorial indicado, funciona legal, agradeço pela ajuda, mas ainda não consegui que o nome a ser persquisado, seja o texto digitado no JTextFild, esta que é a questão!
Veja o exemplo abaixo. Espero que ajude. Eu faço dessa forma.
codigo = empresa.getText(); // aqui eu pego o que foi digitado no JTextField
Class.forName("org.postgresql.Driver").newInstance();
Connection conexao = DriverManager.getConnection("jdbc:postgresql:postgres","usuario", "senha");
Statement instancia = conexao.createStatement();
ResultSet rs = instancia.executeQuery("SELECT codigo, razao FROM empresas");
while(rs.next())
{
if(rs.getString("codigo").equals(codigo)) // aqui é feito a procura sobre o que o usuário digitou no campo texto.
{
ResultaEmpresa.setText(rs.getString("razao"));
achouEmpresa = true;
conexao.close();
break;
}
else
{
achouEmpresa = false;
}
}
Estou fazendo assim, mas não funciona:
PreparedStatement pstmt = conexao.prepareStatement("SELECT *FROM agenda WHERE nome =?");
pstmt.setString(1,""+tfnome.getText());
rs = pstmt.executeQuery();
O texto digitado no JtextField não é passado!
Você tem certeza que tfNome e o seu JTextField se referem ao mesmo objeto?
Já tentou dar um println em tfnome.getText() para ver se o conteúdo do JTextField é impresso?
Um erro comum é vc adicionar o JTextField no panel e depois dar um novo new na variável que deveria representa-lo. Aí vc acaba com uma variável que nada tem a ver com o JTextField que está mesmo na tela. Confere aí no seu código se não existe nenhum outro new dado por acidente.
A mecânica, pelo menos desse trecho que vc mostrou para gente, está certa. O erro está em outro lugar.
Ah, e não precisa fazer “”+tfnome.getText().
Só o tfnome.getText() direto serve.
Outra coisa… não está faltando espaço entre o * e o FROM? E o Java dá alguma mensagem de erro, ou ele simplesmente não retorna nada?
Bom, segue o código completo do JPanel:
[code]public class Localizar extends JPanel implements ActionListener {
JLabel jlborda,jlnome;
JButton btlocalizar,btlimpar;
JTextField tfnome;
JTextArea taresultado;
String n,tr,tc,em;
ResultSet rs;
Statement State;
public Localizar() {
setBackground(new Color(79,148,205));
setLayout(null);
jlborda = new JLabel();
jlborda.setBounds(5,25,385,238);
jlborda.setBorder(BorderFactory.createLineBorder(Color.white,2));
jlnome = new JLabel("Nome :");
jlnome.setBounds(22, 35, 50, 20);
jlnome.setForeground(Color.white);
tfnome = new JTextField();
tfnome.setBounds(65, 35, 208, 20);
tfnome.setBorder(BorderFactory.createLineBorder(new Color(65, 105,225), 1));
btlocalizar = new JButton("Localizar");
btlocalizar.setBounds(275,35,100,20);
btlocalizar.setBackground(Color.white);
btlocalizar.setFocusable(false);
btlocalizar.addActionListener(this);
taresultado = new JTextArea();
taresultado.setBounds(22, 67, 352, 153);
taresultado.setBorder(BorderFactory.createLineBorder(Color.black,1));
taresultado.setOpaque(true);
taresultado.setBackground(Color.white);
taresultado.setEditable(false);
taresultado.setFont(new Font("Arial",Font.PLAIN,13));
btlimpar = new JButton("Limpar");
btlimpar.setBounds(275,230,100,20);
btlimpar.setBackground(Color.white);
btlimpar.setFocusable(false);
btlimpar.addActionListener(this);
add(tfnome);
add(jlborda);
add(jlnome);
add(taresultado);
add(btlocalizar);
add(btlimpar);
//---------------------------------------------------------------------------------------------------
String url = "jdbc:odbc:AgendaJava";
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conexao = DriverManager.getConnection(url);
PreparedStatement pstmt = conexao.prepareStatement("SELECT * FROM agenda WHERE nome =?");
pstmt.setString(1,tfnome.getText()); // se passar a String, no lugar do tfnome.getText(), funciona normalmente.
rs = pstmt.executeQuery();
while(rs.next()){
n = rs.getString("nome");
tr = rs.getString("telres");
tc = rs.getString("telcel");
em = rs.getString("email");
break;
}
conexao.close();
}
catch(ClassNotFoundException ex)
{
System.out.println("Driver JDBC-ODBC não encontrado!");
}
catch(SQLException ex)
{
System.out.println("Problemas na conexao com a fonte de dados");
}
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==(btlocalizar)){
if (tfnome.getText().equals("")) {
taresultado.setText("");
}
else{
taresultado.setText("\n Nome : "+n
+"\n\n"+" Tel cel : "+tc
+"\n\n"+" Tel res : "+tr
+"\n\n"+" e-mail : "+em);
}
}
if(e.getSource()==btlimpar){
tfnome.setText("");
taresultado.setText("");
}
}
}[/code]
Peraí, tem alguma coisa errada. Esse é o código todo?
Se for, você está rodando a consulta no construtor, e não está rodando consulta nenhuma durante a ação do botão.
Isso está errado. Durante o construtor, você dá os news em todos os componentes do form e os posiciona.
No botão de consulta, você roda a consulta, pega o resultado, e seta no JTextField.
A consulta e o JTextField não ficam vinculados para sempre.
Corrigir esse código fica fácil:
[code]public class Localizar extends JPanel implements ActionListener {
JLabel jlborda,jlnome;
JButton btlocalizar,btlimpar;
JTextField tfnome;
JTextArea taresultado;
String n,tr,tc,em;
ResultSet rs;
Statement State;
public Localizar() {
setBackground(new Color(79,148,205));
setLayout(null);
jlborda = new JLabel();
jlborda.setBounds(5,25,385,238);
jlborda.setBorder(BorderFactory.createLineBorder(Color.white,2));
jlnome = new JLabel("Nome :");
jlnome.setBounds(22, 35, 50, 20);
jlnome.setForeground(Color.white);
tfnome = new JTextField();
tfnome.setBounds(65, 35, 208, 20);
tfnome.setBorder(BorderFactory.createLineBorder(new Color(65, 105,225), 1));
btlocalizar = new JButton("Localizar");
btlocalizar.setBounds(275,35,100,20);
btlocalizar.setBackground(Color.white);
btlocalizar.setFocusable(false);
btlocalizar.addActionListener(this);
taresultado = new JTextArea();
taresultado.setBounds(22, 67, 352, 153);
taresultado.setBorder(BorderFactory.createLineBorder(Color.black,1));
taresultado.setOpaque(true);
taresultado.setBackground(Color.white);
taresultado.setEditable(false);
taresultado.setFont(new Font("Arial",Font.PLAIN,13));
btlimpar = new JButton("Limpar");
btlimpar.setBounds(275,230,100,20);
btlimpar.setBackground(Color.white);
btlimpar.setFocusable(false);
btlimpar.addActionListener(this);
add(tfnome);
add(jlborda);
add(jlnome);
add(taresultado);
add(btlocalizar);
add(btlimpar);
}
//Separe o método de busca
public void procura() {
String url = “jdbc:odbc:AgendaJava”;
try {
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
Connection conexao = DriverManager.getConnection(url);
PreparedStatement pstmt = conexao.prepareStatement(“SELECT * FROM agenda WHERE nome =?”);
pstmt.setString(1,tfnome.getText()); // se passar a String, no lugar do tfnome.getText(), funciona normalmente.
rs = pstmt.executeQuery();
if (rs.next()){
n = rs.getString("nome");
tr = rs.getString("telres");
tc = rs.getString("telcel");
em = rs.getString("email");
break;
}
conexao.close();
} catch(ClassNotFoundException ex) {
System.out.println("Driver JDBC-ODBC não encontrado!");
ex.printStackTrace(); //Nunca ignore exceções! Elas te dizem o que aconteceu!
} catch(SQLException ex) {
System.out.println("Problemas na conexao com a fonte de dados");
ex.printStackTrace(); //Nunca ignore exceções! Elas te dizem o que aconteceu!
}
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==(btlocalizar)){
if (tfnome.getText().equals("")) {
taresultado.setText("");
return;
}
procura(); //Aqui vc chama o método de busca
taresultado.setText("\n Nome : "+ n
+"\n\n"+" Tel cel : "+tc
+"\n\n"+" Tel res : "+tr
+"\n\n"+" e-mail : "+em);
}
if(e.getSource()==btlimpar){
tfnome.setText("");
taresultado.setText("");
}
}
}[/code]
Algumas outras dicas:
Resolvido!
Funcionou 100%.
Obrigado pela ajuda, não tenho mais dúvida que o Guj é um fórum diferenciado, por conseguir reunir participantes que aderiram ao plausível ideal de compartilhar o conhecimento.
Obrigado pelo empenho e principalmente pelas dicas, são de grande valia para mim e, enfim . . .
Continuo ai, aprendendo sempre . . .
Abr.