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

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…

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

Até!

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.

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…

Postando …

[quote]±------±------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±------±------------±-----±----±--------±------+
| nome | varchar(30) | YES | | NULL | |
| sobre | varchar(30) | YES | | NULL | |
±------±------------±-----±----±--------±------+[/quote]

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:

[code]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);
    }
    
}

}[/code]

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

flq

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!