Parametro "?" na insercao de dados [resolvido]

13 respostas
C

Caros colegas,

Preciso de uma força, não estou conseguindo usar corretamente o parametro ? no prepareStatement na inserção de dados. Sei que meu erro é simples, já olhei na apostila da Caelum e aparentemente está tudo certo. Atualizei o driver mysql.java.5.1.17 e ainda ocorre o mesmo erro. Já fiz rodar de diversas maneiras, porém quando uso o parametro “?” na string sql ocorre o erro abaixo:

exception in thread “main” 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

Segue o código:

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.SQLException;

public class Operacao {

private PreparedStatement dado;
private String sql;
private Connection con;

public Operacao () throws Exception{
	this.con = FabricaDeConexao.getConnection();
}

public void adiciona() throws SQLException{
	
	DadosLogin dados = new DadosLogin();
	dados.setNome("IBTA");
	dados.setSenha("222");
	
	/*sql = "insert into login values ('"+dados.getNome()+"','"+dados.getSenha()+"')";*/
	
	[b]sql = "insert into login(nome, senha) values(?, ?)";[/b]
    dado = con.prepareStatement(sql);
	dado.setString(1,dados.getNome());
	dado.setString(2,dados.getSenha());
	dado.executeUpdate(sql);
	
	dado.close();
	}

Me dê uma ajuda, por favor?

13 Respostas

Andre_Rosa

Está correto. Você tem certeza de que o nome da tabela e o nome dos campos estão corretos? Experimente trocar o dado.executeUpdate(sql) por dado.execute().

C

colega,

Estou fazendo correto e já troquei o execute.query por execute…e nada…tenho certeza da tabela pois já inseri os dados sem o parametro ? com o mesmo código…

C

André,

Se eu tirar a linha comentado, ou seja, se usar o código da linha comentada funciona normalmente.

Grato,

drsmachado

Qual o erro gerado?
Tem certeza que o nome das colunas são estes mesmos?

CharlesAlves

Posta aqui os erros que estão no seu console, porque aparentemente está tudo certo…

Andre_Rosa

Ele já disse qual é:

Eu sinceramente não sei qual é o problema. Vou acompanhar o tópico, para saber.

C

Cara,

O que mais me estranha que se eu tirar a linha de cometário e fazer pela linha de comentário funciona o banco

a tabela esta correta e o nome das colunas tb

o erro:

Exception in thread main 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

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)

at java.lang.reflect.Constructor.newInstance(Unknown Source)

at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)

at com.mysql.jdbc.Util.getInstance(Util.java:384)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3566)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2562)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2512)

at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:781)

at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:624)

at Operacao.adiciona(Operacao.java:29)

at BancoOperacao.main(BancoOperacao.java:17)
drsmachado

Tua string está exatamente assim?

sql = "insert into login(nome, senha) values(?, ?)";

Se sim, tenta separar a palavra reservada VALUES do parenteses

sql = "insert into login(nome, senha) values       (?, ?)";

E testa

C

Ja dei os espaços e nada…o que está me surpreendendo é o fato de funcionar com

sql = “insert into login (nome, senha) values (”+dado.getString(nome)+“dado.getString(senha)+”)";

dessa maneira funciona e consigo cadastrar no banco as informações…

mas quando uso o ?

com dado.setString(1, dado.getString(nome)); e com o da senha não funciona…

drsmachado

Cara, debuga essa parte e manda o valor do preparedStatement após isto

dado.setString(2,dados.getSenha());

Para que seja possível ver qual a sintaxe que o java tá criando para a query

luxu

coloca um try/catch e debuga como drsmachado falou, tá com cara de bug do mysql…

C

Pessoal,

eu fiz o que me disseram e rodou. Na verdade o erro estava no método da classe jav.sql e não java.jdbc …pois fiz clicando no método e funcionou…

grato pela colaboração!

Valew!

C

Resolvido.

Criado 24 de setembro de 2011
Ultima resposta 24 de set. de 2011
Respostas 13
Participantes 5