Problemas com S.P. [RESOLVIDO]

6 respostas
K

Seguinte!!
to fazendo um projeto que preciso chamar uma stored procedure que cria um novo banco de dados.
a s.p. está criada e funcionando, e pode ser chamada com o seguinte comando: call criabd(user, senha)
até ai blz!!

o problema eh q na hr q eu vou chama-la pelo java(estou utlizando o netbeans 6.8 e mysql), ele da erro
estou usando o seguinte comando

CallableStatement cs = bd.conectar().prepareCall("{call criabd("+user+","+senha+")}"); cs.executeQuery();

será q alguém poderia me dar uma luz?!?!
Obrigado!

6 Respostas

furutani

posta o erro aqui pra gente.

K
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(NativeConstructorAccessorImpl.java:39)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)

at java.lang.reflect.Constructor.newInstance(Constructor.java:513)

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

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

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

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

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

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

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

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

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

at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2077)

at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2228)

at com.mysql.jdbc.CallableStatement.executeQuery(CallableStatement.java:912)

at Ra.RaControl.criaBanco(RaControl.java:90)

a linha 90 eh exatamente a linha do executeQuery();

segue o erro!!

M

Você testou se essa stored procedure funciona executando manualmente?

Pode ser que o erro esteja nela, mas é só um palpite.

furutani

Ao inves de fazer isso

CallableStatement cs = bd.conectar().prepareCall("{call criabd("+user+","+senha+")}");

Faça assim

CallableStatement cs = bd.conectar().prepareCall("{call criabd(?,?)}"); cs.setString(1, user); cs.setString(2, senha);

E
CallableStatement cs = bd.conectar().prepareCall("{call criabd("+user+","+senha+")}");  
 cs.executeQuery();

Imprima o SQL que você gerou manualmente (argh***). Você vai ver que no seu SQL estão faltando aspas simples (’), necessárias para passar os valores de “user” e “senha” como parâmetros.

*** Não faça isso (gerar SQL manualmente), principalmente com senhas. Em vez disso, use PreparedStatement que é muito mais seguro.

K

Valeu
problema resolvido!!
eram a chaves que estavam ali e não deveriam existir!!

Criado 13 de janeiro de 2010
Ultima resposta 13 de jan. de 2010
Respostas 6
Participantes 4