Query funciona executada na mão, mas não funciona no APP Java.[RESOLVIDO]

11 respostas
fsfnit

Pessoal, tenho uma classe que faz tudo de Banco, dentre outras cosias faz um insert com os dados pegos dos campos de uma tela Swing.
Porém, a query montada e executada pelo PreparedStatement me dá esse erro :

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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

Mas a query gerada é essa (### dei um printf no PreparedStatement ###):

com.mysql.jdbc.JDBC4PreparedStatement@bfea1d: insert into TAXAS(stanvisa,stzerada,stdesratizacao,stfunapol,stfunmov,stfarol,stpsc,nmnavio,nmlocal,dtanvisa,dtzerada,dtdesratizacao,dtfunapol,dtfunmov,dtfarol,dtpsc,dteta,comentario) values (‘N/A’,‘N/A’,‘N/A’,‘N/A’,‘N/A’,‘N/A’,‘N/A’,‘Fernando’,'Rio ',‘2008-02-20’,‘2008-02-20’,‘2008-02-20’,‘2008-02-20’,‘2008-02-20’,‘2008-02-20’,‘2008-02-20’,‘2008-02-20’,‘aaaa’)

E se pego essa query gerada, e executo na mão no Mysql, ela executa numa boa. Já perdi 2 dias nisso. Alguem tem alguma idéia ?

Vou colocar a classe:

public class Banco {
    
     public static Connection getConnection(){
        String url = "jdbc:mysql://localhost:3306/pheter"; 
        String username = "root";
        String password = " ";
        try {
            System.out.println("url : "+url + " username: " + username + " password: "+password);
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = (Connection) DriverManager.getConnection(url,username,password);
            System.out.println("Conectado");
            return con;
        }catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex);
            return null;//Olhar este retorno
        }catch (ClassNotFoundException ex) {
                ex.printStackTrace();
                return null;
            }
   }
    
     
     
    public static Date formataData(String dt){
       java.sql.Date day= null;
        
        if(dt.trim().length() == 10){
          
                String dat;
                String a = dt.substring(0, 2);
                String b = dt.substring(3, 5);
                String c = dt.substring(6, 10);
                dat = c + "-" + b + "-" + a ;
                day = java.sql.Date.valueOf(dat);
               
                return day;
            
        }else{
                return day;
              }
        
    }
  
     public static void insertNavio(Navio n) {
         
         java.sql.Date anvisa = (java.sql.Date) formataData(n.getDtanvisa());
         java.sql.Date zerada = (java.sql.Date) formataData(n.getDtzerada());
         java.sql.Date desratizacao = (java.sql.Date) formataData(n.getDtdesratizacao());
         java.sql.Date funapol = (java.sql.Date) formataData(n.getDtfunapol());
         java.sql.Date funmov = (java.sql.Date) formataData(n.getDtfunmov());
         java.sql.Date farol = (java.sql.Date) formataData(n.getDtfarol());
         java.sql.Date psc = (java.sql.Date) formataData(n.getDtpsc());
         java.sql.Date eta = (java.sql.Date) formataData(n.getDteta());

       try{
        Connection con = getConnection();
        
      
        String sqlInsert= "insert into TAXAS(stanvisa,stzerada,stdesratizacao,stfunapol,stfunmov,stfarol,stpsc,nmnavio,nmlocal," +  
                               "dtanvisa,dtzerada,dtdesratizacao,dtfunapol,dtfunmov,dtfarol,dtpsc,dteta,comentario) " +  
                              "values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";  
        
        java.sql.PreparedStatement prpst = con.prepareStatement(sqlInsert);  
   
       //String´s 
        prpst.setString (1, n.getStanvisa());  
        prpst.setString (2, n.getStzerada());
        prpst.setString (3, n.getStdesratizacao());
        prpst.setString (4, n.getStfunapol());
        prpst.setString (5, n.getStfunmov());
        prpst.setString (6, n.getStfarol());
        prpst.setString (7, n.getStpsc());
        prpst.setString (8, n.getNome());
        prpst.setString (9, n.getLocal());
    
  
        //Dates
        prpst.setDate(10, anvisa);
        prpst.setDate (11, zerada);
        prpst.setDate (12, desratizacao);
        prpst.setDate (13, funapol);
        prpst.setDate (14, funmov);
        prpst.setDate (15, farol);
        prpst.setDate (16, psc);
        prpst.setDate(17, eta);
        

        prpst.setString (18, n.getComentario());  

        System.out.println("###  "+ prpst +"  ###");    
        prpst.executeUpdate(sqlInsert);
        prpst.close();
        con.close();
        JOptionPane.showMessageDialog(null,"Navio e Taxas salvo com sucesso");
        
        } catch(SQLException ex){
            ex.printStackTrace();
        }
     }
     
}

11 Respostas

Alexandre_Saudate

Não é o índice que você está usando no PreparedStatement? Quer dizer, ao invés de começar com 1, tenta começar com 0 e vê se vai

fsfnit

Testei aqui, mas não era não. Deu : java.sql.SQLException: Parameter index out of range (0 < 1 ).
Mas obrigado pela idéia, eu to sem ideias.

Alexandre_Saudate

Tenta colocar ponto e vírgula no final da query

luistiagos

como executar uma query na mão? :roll:
pensava que no minimo precisava de um pc com um SO e uma ferramenta do SGDB… mas esta de executar querys na mão é nova pra mim…

fsfnit

Tb nada.

Javabuntu

luistiagos:
como executar uma query na mão? :roll:
pensava que no minimo precisava de um pc com um SO e uma ferramenta do SGDB… mas esta de executar querys na mão é nova pra mim…

boa :lol:

mas não ta gerando nenhuma exception ai não :?:
posta ai se tiver.

fsfnit

Javabuntu:
luistiagos:
como executar uma query na mão? :roll:
pensava que no minimo precisava de um pc com um SO e uma ferramenta do SGDB… mas esta de executar querys na mão é nova pra mim…

boa :lol:

mas não ta gerando nenhuma exception ai não :?:
posta ai se tiver.

A exception é essa:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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

Marky.Vasconcelos

Substitua:

prpst.executeUpdate(sqlInsert);

Por:

prpst.executeUpdate();
V

Ola!

Tente substituir

prpst.executeUpdate(sqlInsert);

por

prpst.execute();
glauber_rochab

Olá fsfnit,

dê uma olhada nisso:

http://www.guj.com.br/posts/list/79009.java

e neste tb

http://forum.java.sun.com/thread.jspa?threadID=641801&start=0&tstart=0

Não consegui ver erro no seu insert… qdo vc conseguir solucionar posta a resposta pra gente.

Flw

fsfnit

Vlw galera, foi só substituir o prpst.executeUpdate(sqlInsert) por prpst.executeUpdate();
Vlw mesmo pela ajuda.

Criado 27 de fevereiro de 2008
Ultima resposta 27 de fev. de 2008
Respostas 11
Participantes 7