PreparedStatement no MySQL - Problemas

4 respostas
alexasrc

PessoALL

Estou tendo problemas em utilizar o metodo PreparedStatement com o MySQL.

Eu tenho uma classe DAO que implementa o metodo criarAeroporto() como exemplo abaixo:

public void criarAeroporto(Aeroporto aeroporto) throws DAOException {
        //validando informações
        if(aeroporto.getId() == null){
             throw new DAOException("Error : O id deve ser informado.");
         }

         try{
              // Preenchendo parametros...
              List ListaParametros = new ArrayList();

               //ID
               params = new DBQueryParams();
               params.setTipo(Types.VARCHAR);
               params.setValor(aeroporto.getId());
               ListaParametros.add(params);

               //DESCRICAO
               params = new DBQueryParams();
               params.setTipo(Types.VARCHAR);
               params.setValor(new String(aeroporto.getDescricao()));
               ListaParametros.add(params);

               query = new DBQuery();
    i = query.executeUpdate(SQL_CREATE_AEROPORTO, ListaParametros);

               }catch(Exception e){
                       throw new DAOException(e.getMessage());
               }

       }

E possui uma classe onde eu passo as minhas querys DBQuery:

public ResultSet executeQuery(String sql, List params) throws Exception{
               try {

               connection = DBConnection.getConnection();
                       pstmt      = connection.prepareStatement(sql);
                       pstmt.clearParameters();
                       Iterator iterator = params.iterator();

                       int x = 0;
                       while(iterator.hasNext()){
                               x++;
                               parametros = (DBQueryParams) iterator.next();
                               pstmt.setObject(x,parametros.getValor(),parametros.getTipo());
                       }

                       rs         = pstmt.executeQuery();
                       return rs;

               } catch (Exception e) {
                       throw new Exception("Error : " + e.getMessage());
               }
       }

Ao tentar executar o metodo criarAeroporto() me retorna o seguinte mensagem de erro :

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '? , ? )' at line 1

O que pode estar acontecendo ? algum problema na minha passagem de parâmetros ?

Ps: A constante SQL_CREATE_AEROPORTO foi declarada dessa maneira:
SQL_CREATE_AEROPORTO = "INSERT INTO AEROPORTO(ID,DESCRICAO) VALUES( ? , ? )"

Sds.

4 Respostas

cv1

Pergunta nao relacionada, mas extremamente importante: voce nao fecha os seus resultsets, statements ou connections nunca?

alexasrc

Infelizmente não havia pensado nessa parte, me envolvi nesse probema que acabei esquecendo do resto. :oops:

Rafael_Steil

Somente por desencargo de consciencia, mude a chamada a

pstmt.setObject(x,parametros.getValor(),parametros.getTipo());

Para a implementacao correta, como setInt() e setString(), e teste.

Rafael

alexasrc

Rafael Steil:
Somente por desencargo de consciencia, mude a chamada a

pstmt.setObject(x,parametros.getValor(),parametros.getTipo());

Para a implementacao correta, como setInt() e setString(), e teste.

Rafael

Eu estou fazendo a modificação do meu preparedStatement utilizando os SetXXX. Eu havia criada uma classe que montava os parametros utilizando o setObject(), mas vou fazer a query na minha classe DAO mesmo.

Criado 6 de abril de 2005
Ultima resposta 7 de abr. de 2005
Respostas 4
Participantes 3