2012-06-26 25 views
0

我遇到的問題使用存儲過程在MySQL 5 +與Play框架1.2.3。 我猜我的方法是不正確的 - 我使用callable語句並將參數傳遞給存儲過程。該過程不應該返回任何輸出變量(只是用於插入)。除了切換到任何ORM選項外,我最好如何解決此設置問題。存儲過程與播放1.2+使用存儲過程的示例

// con is connection to mysql 
CallableStatement cs = this.con.prepareCall("{call sp_InsertTest(?,?,?,?,?,?)}"); 
cs.setString(1, user.value1); 
cs.setString(2, user.value2); 
cs.setString(3, user.value3); 
cs.setString(4, user.value4); 
cs.setString(5, user.value5); 
cs.setString(6, user.value6); 

//all values are strings 

當我運行在調用語句使用executeUpdate,它拋出從上述第一線路的錯誤(I去除從日誌行下面從那裏被拋出):

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:546) 
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:500) 
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:476) 
at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:471) 
at play.mvc.ActionInvoker.invoke(ActionInvoker.java:159) 
at play.server.PlayHandler$NettyInvocation.execute(PlayHandler.java:220) 
at play.Invoker$Invocation.run(Invoker.java:265) 
at play.server.PlayHandler$NettyInvocation.run(PlayHandler.java:200) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98) 
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206) 
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
at java.lang.Thread.run(Thread.java:662) 

任何建議將受到歡迎。

回答

1

您的堆棧跟蹤不完整,因此很難確切地看到您的錯誤。

在我的情況下存儲過程很好。您首先需要連接

Connection conn = DB.getConnection(); 

然後您可以打電話。我不把括號中我的電話

con.prepareCall("call sp_InsertTest(?,?,?,?,?,?)"); 
+0

感謝您的回答 - 我試過一樣的 - 我刪除線被指向線從那裏例外是是(在上面的第一行代碼)拋出。我也在研究如何使用存儲過程使用play.DB.execute,並且一旦完成就會更新。 –

+1

我正在使用play.db.execute,我可以從那裏調用存儲過程。 –