Criação de Stored Procedures com PreparedStatement Java/MySQL

3 respostas
ERVER

olá pessoal,

sou novo aqui e to tendo um grande problema pra resolver:
to tentando criar várias stored procedures no meu bd a partir da inicialização do meu sistema, ou seja, meu sistema inicia, verifica se o bd existe, caso não exista, o cria certinho, com todas as tabelas, porém, na hora de criar os procedures (utilizando PreparedStatement), ele gera erro de sintaxe. O estranho é que, quando executo esse mesmo código SQL query browser do MySQL ele funfa certinho. já verifiquei erro de contatenação, de sintaxe e nada.

Alguem ai pode dar uma luz, ou sabe se é possivel criar um procedure no MySQL 5.1 usando PreparedStatement no Java?

muito obrigado desde já!

abração a todos!

3 Respostas

ERVER

erro gerado: 06/12/2010 13:06:18 interfaces.Index$9 run
GRAVE: null
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 ‘DELIMITER $$ DROP PROCEDURE IF EXISTS bd_projeto_transito.insere_proprietario`’ at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)

erro de sintaxe, mas como?

gilmaslima

$ERVER, posta seu código ai…

Outra coisa, não sei como é no MySql, mas no Oracle eu já crio a procedure assim CREATE OR REPLACE PROCEDURE NOME_DA_PROCEDURE, verifique se no MySql aceita esse tipo de sintaxe pq assim se o objeto já existir ele sobrescreve senão, ele só cria.

flw!

ERVER

Olá , gilmaslima!

Mto obrigado por disponibilizar parte do seu tempo pra me dar uma força aqui!

Eu já fazia algo parecido: DROP PROCEDURE IF EXISTS bd_projeto_transito.insere_infracao $$
Ou seja, ele apagava se já existisse.
Consegui resolver aqui, parece que era um problema em usar delimitadores. Vou postar o código aqui, o que gera erro e o que conegui fazer funcionar, caso mais alguem passe por isso um dia não ter tanta dor de cabeça:

O CÓDIGO SQL QUE GERAVA ERRO com PREPAREDSTATEMENT NO JAVA:

DELIMITER $$

DROP PROCEDURE IF EXISTS bd_projeto_transito.insere_proprietario $$
CREATE PROCEDURE bd_projeto_transito.insere_proprietario (IN _CPF BIGINT(20),IN _CNH BIGINT(20),
IN _nome VARCHAR(70), IN _rg BIGINT(20), IN _endereco VARCHAR(50), IN _numero INT(5),
IN _bairro VARCHAR(25), IN _cidade VARCHAR(50), IN _cep BIGINT(20),
IN _estado VARCHAR(2), IN _sexo VARCHAR(1))
BEGIN
INSERT INTO proprietario (cpf, cnh, nome, rg, endereco, numero, bairro, cidade, cep, estado,
sexo) VALUES (_CPF, _CNH, _nome, _rg, _endereco, _numero, _bairro, _cidade, _cep,
_estado, _sexo);

END $$

DELIMITER ;

Dai tirei os delimitadores e o drop, a partir dai funcionou(aqui inclui o código java pq to na correria pra terminar isso aqui hj, depois posto direitinho):

pstmt = (PreparedStatement) con.prepareStatement("CREATE PROCEDURE insere_proprietario(IN _CPF BIGINT(20),IN _CNH BIGINT(20), "
            + " IN _nome VARCHAR(70), IN _rg BIGINT(20), IN _endereco VARCHAR(50), IN _numero INT(5), "
            + " IN _bairro VARCHAR(25), IN _cidade VARCHAR(50), IN _cep BIGINT(20), "
            + " IN _estado VARCHAR(2), IN _sexo VARCHAR(1)) "
            + " BEGIN INSERT INTO proprietario (cpf, cnh, nome, rg, endereco, numero, bairro, cidade, cep, estado, "
            + " sexo) VALUES (_CPF, _CNH, _nome, _rg, _endereco, _numero, _bairro, _cidade, _cep, "
            + " _estado, _sexo);END");
    pstmt.executeUpdate();

Novamente muito obrigado, gilmaslima!

Abraços!

Criado 6 de dezembro de 2010
Ultima resposta 6 de dez. de 2010
Respostas 3
Participantes 2