Buscar nome usando sql em java

7 respostas
T

Blz pessoal?
Estou com um problema, quando faço uma cláusula restritiva para buscar dados por código ou nome, recebo um erro de SQL.
Help me, pls.

conectaBanco.executasql("SELECT codigo,nome FROM dados WHERE codigo = "+tf_codigo.getText()+" OR nome = '"+tf_nome.getText().toString()+"';");

7 Respostas

nel

Oi!

Se você diz que tem erro mas não posta ele, fica bem dificil de descobrir o que é , concorda?
Outro detalhe, não fique concatenando valores, se preocupando com aspas simples/duplas para String e etc, simplesmente use o PreparedStatement, é para isso que ele serve.

Basicamente, seria isso:

String sql = "SELECT codigo,nome FROM dados WHERE codigo = ? OR nome = ?"); PreparedStatement ps = connection.prepareStatement(sql); ps.setString(1, tf_codigo.getText()); ps.setString(2, tf_nome.getText().toString());

E para finalizar, não se coloca ‘;’ ao fim da Query.
Abraços.

T

Valeu pela ajuda, mas não entendi a linha PreparedStatement ps = connection.prepareStatement(sql);
Tenho que substituir o “connection”?

Valeu.

nel

t3sting:
Valeu pela ajuda, mas não entendi a linha PreparedStatement ps = connection.prepareStatement(sql);
Tenho que substituir o “connection”?

Valeu.

Não, é dessa forma que você cria o PreparedStatement para uso posterior.
Por favor, poste o erro no qual comentou quando abriu o tópico e sua classe com o método conectaBanco.executasql.

alexvingg

o connection vai ser seu conectaBanco.

D

nel:
t3sting:
Valeu pela ajuda, mas não entendi a linha PreparedStatement ps = connection.prepareStatement(sql);
Tenho que substituir o “connection”?

Valeu.

Não, é dessa forma que você cria o PreparedStatement para uso posterior.
Por favor, poste o erro no qual comentou quando abriu o tópico e sua classe com o método conectaBanco.executasql.

Prepared Statement previne o usuario mal intencionado de usar SQL INJECTION e vc se dar mal… procure alguns exemplos de prepared Statement… tem muitos aqui no forum…

sobre o problema… só poderemos ajudar se vc postar o erro que esta dando…

T
import java.sql.*;
import javax.swing.*;
public class conexaoBanco 
{
    final private String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
    final private String url = "jdbc:odbc:dados";
    final private String usuario = "";
    final private String senha = "";
    
    private Connection conexao;
    public Statement statement;
    public ResultSet resultset;
    
    public boolean conecta()
    {
        boolean result = true;
        try
        {
            Class.forName(driver);
            conexao = DriverManager.getConnection(url,usuario,senha);
            JOptionPane.showMessageDialog(null,"Conectado !!!");            
        }
        catch(ClassNotFoundException eDriver)
        {
            JOptionPane.showMessageDialog(null,"O driver especificado está com problema"+eDriver);
            result = false;
        }
        catch(SQLException errosql)
        {
            JOptionPane.showMessageDialog(null,"A SQL informada não pode ser executada "+
                    "ocorreu o erro: "+errosql.getMessage());
            result = false;
        }
        return result;
    }
    
    public void desconecta()
    {
        boolean result = true;
        try
        {
            conexao.close();
            JOptionPane.showMessageDialog(null,"Desconectado !!!");
        }
        catch(SQLException erronasql)
        {
            JOptionPane.showMessageDialog(null,"Ocorreu erro ao fechar o banco "+
                    "erro: "+erronasql.getMessage());
            result = false;
        }
    }
    
    public void executasql(String sql)
    {
        try
        {
            statement = conexao.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
            resultset = statement.executeQuery(sql);
        }
        catch(SQLException erroSQL)
        {
            JOptionPane.showMessageDialog(null,"Erro na SQL: "+erroSQL.getMessage()+" A SQL passada é "+sql);
        }
    }
}
import java.awt.event.ActionEvent;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import javax.swing.table.DefaultTableModel;
import java.sql.*;

public final class telaPrincipal extends JFrame
{
    //Declarando elementos da tela
    JPanel painelItens,painelTabela;
    JLabel lbl_codigo;
    JLabel lbl_nome;
    JTextField tf_codigo;
    JTextField tf_nome;
    JButton bt_cadastrar;
    JButton bt_consultar;
    JTable tb_dados;
    JScrollPane painelRolante;
    
    conexaoBanco conectaBanco;
    PreparedStatement preparaCodigo;
    
    public telaPrincipal()
    {        
        iniciaObjetos();   //Método para iniciar os elementos utilizados                
    }    
     
    //Define o título das colunas da tabela de resultado
    DefaultTableModel modelo = new DefaultTableModel(null,new String[]{"Código","Nome"});
        
    public void iniciaObjetos()
    {        
        painelItens = new JPanel();
        painelTabela = new JPanel();
        lbl_codigo = new JLabel();
        lbl_nome = new JLabel();
        bt_cadastrar = new JButton();
        bt_consultar = new JButton();
        tf_codigo = new JTextField(10);
        tf_nome = new JTextField(25);
        painelRolante = new JScrollPane();
        
        
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setTitle("Teste de Inserção");
        setSize(800,600);
        setLocation(100,100);
        
        lbl_codigo.setText("Código");
        lbl_nome.setText("Nome");
        
        bt_cadastrar.setText("Cadastrar");
        bt_consultar.setText("Consultar");
        bt_consultar.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                bt_consultarActionPerformed(this);
            }
        });
        
        tf_codigo.setSize(10,20);
        
        getContentPane().setLayout(new GridLayout(1,6,10,10));
        
        painelItens.add(lbl_codigo);
        painelItens.add(tf_codigo);
        painelItens.add(lbl_nome);
        painelItens.add(tf_nome);
        painelItens.add(bt_cadastrar);
        painelItens.add(bt_consultar);
        
        
        
        tb_dados = new JTable(modelo);
        modelo.setNumRows(0);       
        
        
        tb_dados.setColumnSelectionAllowed(true);
        tb_dados.getColumnModel().getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
        
        painelRolante.setViewportView(tb_dados);
        
        painelTabela.setLayout(new GridLayout());
        painelTabela.add(painelRolante);
        
        
        
        
        this.setLayout(new BorderLayout());
        
        this.add(painelItens,BorderLayout.NORTH);
        this.add(painelTabela,BorderLayout.CENTER);
    }      
    
    private void bt_consultarActionPerformed(ActionListener e)
    {        
        conectaBanco = new conexaoBanco();
        conectaBanco.conecta();        
           
        JOptionPane.showMessageDialog(null,"Funciona");
        
        preenchetabela();
    }
    
    //Método para pesquisar e preencher a tabela
    public void preenchetabela()
    {       
        //Define largura de cada coluna
        /*tb_dados.getColumnModel().getColumn(0).setPreferredWidth(6);
        tb_dados.getColumnModel().getColumn(1).setPreferredWidth(25);*/
        
        try
        {       
            //Verifica se os campos tem algum dado ou está nulo
            if((tf_codigo.getText() == null || tf_codigo.getText().equals("")) && 
                    (tf_nome.getText() == null || tf_nome.getText().equals("")))
            {
                selecionaTudo();
            }
            else 
            {              
               
                conectaBanco.executasql("SELECT * FROM dados");
            }
            
            modelo.setNumRows(0);
            //Preenche a tabela
            while(conectaBanco.resultset.next())
            {
                /*String[] dados = new String[2];
                dados[0] = conectaBanco.resultset.getString("codigo");
                dados[1] = conectaBanco.resultset.getString("nome");
                modelo.addRow(dados);*/
                modelo.addRow(new Object[]{conectaBanco.resultset.getString("codigo"),conectaBanco.resultset.getString("nome")});
            }
            
            //Limpar dados dos textfields
            tf_codigo.setText("");
            tf_nome.setText("");
        }
        catch(SQLException sqlerro)
        {
            JOptionPane.showMessageDialog(null,"Nao localizou os dados"+sqlerro);
        }

     }
       
    private void selecionaTudo() 
    {        
            JOptionPane.showMessageDialog(null,"Função selecionaTudo");
            conectaBanco.executasql("SELECT * FROM dados;");            
    }       
    
    public static void main(String args[])
    {
        new telaPrincipal().setVisible(true);        
    }
    
}
alexvingg

seria o erro e não o seu projeto :shock:

Criado 11 de agosto de 2011
Ultima resposta 11 de ago. de 2011
Respostas 7
Participantes 4