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 に答える