0

我在使用带有 Play 框架 1.2.3 的 MySQL 5+ 中的存储过程时遇到问题。我猜我的方法不正确 - 我正在使用可调用语句并将参数传递给存储过程。该过程不应该返回任何输出变量(仅用于插入)。除非切换到任何 ORM 选项,否则我如何才能最好地解决此设置。

// 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

当我在可调用的 stmt 上运行 executeUpdate 时,它​​会从上面提到的第一行抛出一个错误(我从下面的日志中删除了该行,从它被抛出的地方):

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)

欢迎大家提出意见。

4

1 回答 1

1

您的堆栈跟踪不完整,因此很难确切地看到您有什么错误。

就我而言,存储过程运行良好。您必须首先获得与

Connection conn = DB.getConnection();

然后你就可以打电话了。我没有在我的电话中加上括号

con.prepareCall("call sp_InsertTest(?,?,?,?,?,?)");
于 2012-06-27T07:03:50.380 回答