Problema em busca SQL

2 respostas
tandrade

Pessoal,

Fiz um sistema aqui para buscar alguns valores na tabela e me mostrar uma JPanel caso os valores obtidos do JTextField fossem encontrados.

Tenho 2 campos, o primeiro é o local e o segundo é a posição.

Meu intuito é fazer com que o programa busque no BD primeiro no local e, segundo, a posição, exibindo o JPanel caso aquela posição tenha sido encontrada no local. E exibir outra janela caso não tenha encontrado aquela posição para aquele determinado local.

No entanto, tenho duas colunas de posições para um local, ou seja, eu checo primeiramente o campo do local e depois verifico as duas outras colunas de posição.

O problema é que aparentemente meu programa não está checando o campo local na verificação por posições, por que quando vou cadastar um novo local, com uma posição já existente em outro local previamente cadastrado, ele diz que não é possivel cadastrar sendo que os locais são completamente diferentes, porém podem ter a mesma posição

Não sei se fui claro o bastante, mas segue o código que talvez possa esclarecer mais.

try{
            String dsn     = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=c:/xxx/xxx.mdb";
            String usuario = "";
            String senha   = "";
            String sql     = "";
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
            Connection con = DriverManager.getConnection(dsn,usuario,senha);
            Statement st = con.createStatement();
            PreparedStatement ps = con.prepareStatement("SELECT * FROM OBJ WHERE POSICAO1=? OR POSICAO2=? AND LOCAL=?");
            
            ps.setString(1, tf_p1.getText());
            ps.setString(2, tf_p1.getText());
            ps.setString(3, tf_local.getText());
            ResultSet rs = ps.executeQuery();
            int numberOfRows = 0;
            while(rs.next()){
                numberOfRows++;
            }
            st.close();
            con.close();
            if (numberOfRows != 0){
                JOptionPane.showMessageDialog(null,"     Posição Ocupada! \n\nSelecione outra posição!",JOptionPane.ERROR_MESSAGE);
            }
else{
                JOptionPane.showMessageDialog(null,"      Posição Disponível", JOptionPane.INFORMATION_MESSAGE);

            }
            
            
        } catch(Exception e)  {
            System.out.println(e);
        }

:D:D

2 Respostas

T
WHERE POSICAO1 = ? OR POSICAO2 = ? AND LOCAL = ?

Você queria dizer

WHERE (POSICAO1 = ? OR POSICAO2 = ?) AND LOCAL = ?

ou

WHERE POSICAO1 = ? OR (POSICAO2 = ? AND LOCAL = ?)

?
São coisas diferentes. Acho que você queria a primeira coisa (checar uma das posições e o local), mas a sintaxe SQL, devido à precedência de operadores (onde o AND é mais forte que o OR) entendeu a segunda coisa.

Ponha os parênteses no local certo, e tente novamente.

tandrade

Deu certo a primeira :):slight_smile:

Na lata! rs

Muito Obrigado.

Criado 16 de janeiro de 2008
Ultima resposta 16 de jan. de 2008
Respostas 2
Participantes 2