Java & Stored Procedures

20 respostas
C

Até hoje, a única forma que conheço de executar sql em java é concatenação da string.

Recentemente, trabalho num projeto em asp net, e estamos usando stored procedure e parece uma maravilha de simples e prático.

Como devo fazer em java para executar uma stored procedure ??

20 Respostas

Rafael_Steil

Utilize um CallableStatement.

Qualquer busca no Google vai trazer bastante informacao a respeito :wink:

Rafael

vamorim

Então tá na hora de você conhecer PreparedStatement.
De uma olhada nesse artigo do GUJ.

C

Ah, legal, este preparedStatement e aquele método de passagem de parâmetros funcionam muito parecidos com a stored procedure.

Mas no caso de eu já ter minhas stored procedures na base de dados, há algum jeito de executá-las???

Rafael_Steil

“cezarsg”:

Mas no caso de eu já ter minhas stored procedures na base de dados, há algum jeito de executá-las???

Se voce tivesse lido a minha resposta, voce encontraria isso:

http://java.sun.com/j2se/1.4.2/docs/api/java/sql/CallableStatement.html

Rafael

Leandro_Rangel_Santo

“cezarsg”:
Ah, legal, este preparedStatement e aquele método de passagem de parâmetros funcionam muito parecidos com a stored procedure.

Mas no caso de eu já ter minhas stored procedures na base de dados, há algum jeito de executá-las???

cara
por exemplo ,se vc tiver usando SQLServer ,vc monta seu preparedStatement assim
“exec sp_sua_procedure @argumento1 = ?”
se tiver usando oracle
“call sp_sua_procedure”
e por ai vai

Rafael_Steil

“Leandro Rangel Santos”:

cara
por exemplo ,se vc tiver usando SQLServer ,vc monta seu preparedStatement assim
“exec sp_sua_procedure @argumento1 = ?”
se tiver usando oracle
“call sp_sua_procedure”
e por ai vai

Por isso que existe o CallableStatement. Com ele voce nao precisa ficar fazendo “tricks” para executar as procedures.

Rafael

F

“Rafael Steil”:
“Leandro Rangel Santos”:

cara
por exemplo ,se vc tiver usando SQLServer ,vc monta seu preparedStatement assim
“exec sp_sua_procedure @argumento1 = ?”
se tiver usando oracle
“call sp_sua_procedure”
e por ai vai

Por isso que existe o CallableStatement. Com ele voce nao precisa ficar fazendo “tricks” para executar as procedures.

Rafael

Realmente, se fosse para fazer gambiarras o cara podia rodar a procedure como um SQL normal fazendo assim.

BEGIN tua_procedure END;

Mas para não vermos essas coisas horriveis é que existe o CallableStatement como disse o Rafael.

]['s

C

Noosa, desculpa Rafael.

Não consegui pesquisar naquele momento.

Mas acabei de verificar no Google. CallableStatement realmente é muito mais vantajoso pq eu posso concentrar minhas stored procedures na base, e simplificar minha aplicação. Não precisarei gravar minhas sp’s em properties.

http://www.thirdeyeconsulting.com/jdbc.html

_fs

Desculpe cara, mas stored procedures fedem :expressionless:
Meses depois desta exelente discussão aqui:
http://www.guj.com.br/forum/viewtopic.php?t=8443&highlight=stored+procedure
Eu senti na pele. Não dá cara … torna um projeto, que pode até ter bases boas, num amontoado de porcarias que ninguém tem muita certeza do que fazem, que ninguém mais pode mudar o nome de uma tabela, onde ninguém consegue fazer “aquela função lá” fazer um order by decrescente e não crescente.

Sério, não faça isso.

F

“LIPE”:
Desculpe cara, mas stored procedures fedem :expressionless:
Meses depois desta exelente discussão aqui:
http://www.guj.com.br/forum/viewtopic.php?t=8443&highlight=stored+procedure
Eu senti na pele. Não dá cara … torna um projeto, que pode até ter bases boas, num amontoado de porcarias que ninguém tem muita certeza do que fazem, que ninguém mais pode mudar o nome de uma tabela, onde ninguém consegue fazer “aquela função lá” fazer um order by decrescente e não crescente.

Sério, não faça isso.

Olha eu fui um dos que neste post meio que “defenderam” o uso de procedures. Meses depois, não gosto mais hahahahaha. Continuo achando que em um caso muito especifico, se for para melhorar muito a performance até vai, mas se eu puder hoje nem penso em fazer procedures.

Não quiz comentar isso no post do cara pq sei que vai dar discução, e da boa denovo :stuck_out_tongue:

]['s

_fs

começa a carregar as armas

:mrgreen:

cara, depois de uns testes que eu fiz aqui no meu pczinho … e java demorando só 1.3 segundos a mais do que stored procedures para fazer um processamento ferrado … sem chances :smiley:

“onde que faz isso mesmo?”
“ah, é naquela lá que o nome começa com sp…”
*começa a procurar na lista com mais de 50 sps
da um tiro na cabeça
vai para o céu
descobre que lá não tem danoninho
ressucita
deleta o sqlserver
sorri debilmente enquanto colegas de trabalho se jogam pela janela

alucinando por falta de sono

:mrgreen:

F

“LIPE”:
começa a carregar as armas

:mrgreen:

cara, depois de uns testes que eu fiz aqui no meu pczinho … e java demorando só 1.3 segundos a mais do que stored procedures para fazer um processamento ferrado … sem chances :smiley:

“onde que faz isso mesmo?”
“ah, é naquela lá que o nome começa com sp…”
*começa a procurar na lista com mais de 50 sps
da um tiro na cabeça
vai para o céu
descobre que lá não tem danoninho
ressucita
deleta o sqlserver
sorri debilmente enquanto colegas de trabalho se jogam pela janela

alucinando por falta de sono

:mrgreen:

Situação 2:

Alterei os parametros da sp…
Onde que ela é chamada mesmo?
Cara do outro programador após saber isso :cry:

Passo por isso todo dia, posso falar com alguma autoridade é f*****

]['s

Rafael_Steil

Isso em termos eh culpa “sua” tambem. Se a procedure estivesse definida em um lugar em comum, como um .properties, voce acharia facilmente as chamadas dela.

Esse tipo de problema que voce descreveu vai ocrrer em qualquer caso, seja alterando um metod, alterando a estrutura de uma tabela e tudo mais. E depois, ha lugares ( aka empresas para as quais voce desenvolve algum sistema )onde nao ha escolha… eh usar procedure ou nao fazer o sistema ( certo ou errado, ha empresas com regras assim, e o que voce pode fazer eh aceitar )

Rafael

_fs

Mas e se o sistema já estava pronto?

Antes de abrirmos a empresa um dos sócios já tinha desenvolvido um software (muito bom por sinal), mas tudo em asp + stored procedures. Só ele no planeta é capaz de dar manutenção naquilo … ou alguém só olhando código por 6 meses :expressionless:

Por mais organizado que seja, não dá cara. Não tem comparação com a organização de projetos possível com OO + uma boa ide + boas práticas de programação.

Rafael_Steil

Qualquer projeto, onde uma unica pessoa ( ou um grupo mto seleto ) desenvolveu tudo, vai ser complicado para entender, se voce cair de para-quedas. Ainda mais em sistemas grandes.
Pode fazer tudo em prevalencia se quiser, e ainda assim vai existir complexidade. Jogar toda a “culpa” do tempo de aprendizado unicamente por existir stored procedures nao faz sentido.

Rafael

F

Bom este é meu caso quando cheguei o sistema ja existia a tempo, e eu não tenho como alterar isso, o maximo que eu tento é manter documentado onde eu uso o que.
Para piorar a empresa quer que fique em SP mesmo, ou seja, eu não tenho muito que fazer.

Sobre o problema em si, concordo que de para desenvolver algo até organizado colocando em SP’s, mas acho que não vale a pena todo esforço.

Ps.: Minha opinião já foi muito diferente disso…as pessoas mudam :stuck_out_tongue:

]['s

_fs

Rafael, eu entendo perfeitamente o seu ponto de vista e, em outra situação provavelmente concordaria com você.

Mas cara … você não tem noção. Uma lista gigante com sps com até 300 linhas de código … não dá cara.
O enterprise manager (sql server) não dá suporte nenhum às sps … não tem debug, não tem explorer, não dá para separar em pastinhas, não tem “find and replace all” … não tem merda nenhuma :expressionless: só uma checagem normal de sintaxe. Horroroso.

Rafael_Steil

Bom… eu to tendo que manter, sozinho, um sitema onde ha 50 mil linhas de codigo pl/sql. Ha procedures com 2 mil linhas ( melhor dizendo: o package inteiro tem 2 mil… as procedures estao quebradas por responsabilidae ). Entao eu tenho um pouco de nocao do problema :wink:

Em relacao aos defeitos do enterprise manager, nao ha alguma outra ferramenta externa para mexer com isso? pq, se eu fosse depender das tools do oracle, estaria no limbo :mrgreen:

Nao sou a favor de ter essa monstruosidade em sp, mas…

Rafael

F

“Rafael Steil”:
Bom… eu to tendo que manter, sozinho, um sitema onde ha 50 mil linhas de codigo pl/sql. Ha procedures com 2 mil linhas ( melhor dizendo: o package inteiro tem 2 mil… as procedures estao quebradas por responsabilidae ). Entao eu tenho um pouco de nocao do problema :wink:

Em relacao aos defeitos do enterprise manager, nao ha alguma outra ferramenta externa para mexer com isso? pq, se eu fosse depender das tools do oracle, estaria no limbo :mrgreen:

Nao sou a favor de ter essa monstruosidade em sp, mas…

Rafael

Que beleza, não sou o ultimo dos moicanos :stuck_out_tongue:

Cara aqui tenhos umas 10 packages em média 7 mil linhas cada…claro tudo dividido em procedures e functions, mas é uma droga para dar manutenção, ainda mais quando vc tem um sistema feito com essas ferramentas RAD que chamam as SP de trocentos lugares.

Sobre as ferramentas, se formos comparar prefiro ficar com o Notepad mesmo, ou um Editplus da vida, mais o SQL Plus :slight_smile:

]['s

L

Este sapo mudou a minha vida :smiley:

http://www.toadsoft.com/

Criado 16 de junho de 2004
Ultima resposta 21 de jun. de 2004
Respostas 20
Participantes 7