PreparedStatement - Erro no inserir... "syntax to use near '?,?)'" [Resolvido]

6 respostas
peerless

Bom dia galera, fiz um método que gera o Prepared/SQL sozinho … e na hora de usar ele, gera a seguinte exception:

Posso ser uma desatenção boba agora, mas é que ja estou de cabeça quente e ñ consigo ver o que pode estar causando tal excption…, então se alguém souber o pq… ficaria agradecido

Ah sim, ele esta gerando o SQL corretamente… o debug dele retornou:

insert into teste values  (?,?)

Abraços…

6 Respostas

maquiavelbona

Tem que ver como você está usando o código. Coloque algumas linhas.

Até!

von.juliano

Vc precisa inserir algum valor né? Sua tabela está esperando que tipo de valores? Qualquer que for, enquanto sua inserção for

insert into teste values (?,?)nunca vai funcionar. No lugar dos “?” vc tem q por os valores correspondentes.

P

Sua tabela so tem dois campos ?

Post a estrutura da sua tabela e pedaço do codigo que cria o statment e executa a query…

peerless

Postando ......

+-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | nome | varchar(30) | YES | | NULL | | | sobre | varchar(30) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+
Código de preparo:
public int lengthArray(String [] array) {
        boolean b = true; int i = 0;
        while (b) {
          if (array[i] != null)
            i++;
          else
            b = false;
        }
        return i;
    }
    public String createFields(String[] interrogacao) {
        boolean b = true; int i = 0;
        String retorno = "";
        while (b) {
            if (interrogacao[i] != null)
                if (interrogacao[i+1] == null) retorno+="?";
                else retorno += "?,";
            else
              b = false;
            i++;
        }
        return retorno;
    }
    public void addTable(String table, String[] values) throws SQLException, ClassNotFoundException {
        PreparedStatement pst;
        String execute;
        execute = "insert into "+table+" values ("; 
        execute += createFields(values);
        execute +=")";   
        System.out.println(execute);
        pst = gd.conectaBD("CPADI").prepareStatement(execute);    
        for (int i = 0;i<lengthArray(values);i++)
          pst.setString(i+1,values[i]); 
        pst.execute(execute);
    }

Código de teste:

public static void main ( String args[]) {
        teste t = new teste();
           String[] nomes = new String[5];
           nomes[0] = "3";
           nomes[1] = "Nome1";
        try {
            
            t.addTable("teste",nomes);
            System.out.println("Add sucessfull");
        } 
        catch (Exception e) {
            System.out.println("Erro :" + e);
        }
        
    }
}
R

Você nao deve estar passando para um objeto PreparedStatement pra executar aquele insert. deve estar chamando um executeUpdate do Statement.

flq

peerless

Velhão, na verdade acho que isso é coisa futura… o problema foi um vacilo BOBO meu…

mas aqui vai a solução… eu estava usando:

pst.execute(execute);

e o correto é sem argumento algum, OBVIO! BAH :oops:

pst.execute();

funcionou tranquilo!

abração!

Criado 16 de março de 2007
Ultima resposta 16 de mar. de 2007
Respostas 6
Participantes 5