MySQL Workbanch で作成されたプロシージャ「proc」を呼び出してみました。
create database test_database;
use test_database;
delimiter &&
create procedure proc(inout param INT UNSIGNED)
begin
set param = 2*param;
end&&
このアプリケーションを使用して:
package test;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
public class Test {
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1", "root", "root");
connection.createStatement().execute("USE test_database");
CallableStatement callableStatement = connection.prepareCall("{call proc(?)}");
callableStatement.setInt(1, 5);
callableStatement.registerOutParameter(1, java.sql.Types.INTEGER);
ResultSet result = callableStatement.executeQuery();
if (result.first()) {
System.out.println(result.getInt(1));
}
} catch (Exception ex) {
ex.printStackTrace();
}
}}
しかし、私は常にこのエラーが発生します:
java.sql.SQLException: Parameter number 1 is not an OUT parameter
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1094)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:997)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:983)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:928)
at com.mysql.jdbc.CallableStatement.checkIsOutputParam(CallableStatement.java:695)
at com.mysql.jdbc.CallableStatement.registerOutParameter(CallableStatement.java:2016)
at test.Test.main(Test.java:16)
私は何時間も間違っていることを見つけようとしてきましたが、成功しませんでした. 多くの質問を見ましたが 、関数内でトランザクションを実行できないため、これは役に立ちません
名前付きパラメーターを使用するとNullPointerExがスローされるため、これは役に立ちません(なぜ??)
プロシージャが存在するため、これは役に立たず、IN パラメータのみを使用する場合は例外をスローしませんが、INOUT または OUT を使用すると、前述の例外がスローされます
JDBCコネクタの更新が役に立たなかったため、これは役に立ちません
だから私の質問は簡単です:何が間違っている可能性がありますか?