JDBC MySQL 存储过程抛出异常" Parameter number 2 is not an OUT parameter" ?



我有以下代码片段:

final String adatbazisURL = "jdbc:mysql://localhost:3306";
Connection kapcsolat = null;
Statement utasitas = null;
try {
    Class.forName("com.mysql.jdbc.Driver");
    kapcsolat = DriverManager.getConnection(adatbazisURL, felhNev,
            jelszo);
    utasitas = kapcsolat.createStatement();
    String sql = "USE"+Azonositok.getAdatbazisNev()+";";
    utasitas.executeUpdate(sql);
} catch (Exception e) {
    e.printStackTrace();
    throw new RuntimeException(e);
}
String sql = "DROP PROCEDURE IF EXISTS proba ;";
utasitas.executeUpdate(sql);
sql = "CREATE PROCEDURE proba (" + "IN number1 INTEGER, "
        + "OUT number2 INTEGER) " + "BEGIN " +
        "SET number2 = number1;" + "END";
utasitas.execute(sql);
CallableStatement callableStatement = null;
String callString = "{CALL proba(?,?)}";
callableStatement = kapcsolat.prepareCall(callString);
callableStatement.setInt(1, 5);
callableStatement.registerOutParameter(2, java.sql.Types.INTEGER);
callableStatement.execute();
int number = callableStatement.getInt(2);
callableStatement.close();

当我运行这个代码时,它会抛出"参数2不是OUT参数"异常。为什么?

问题是:

String sql = "USE"+Azonositok.getAdatbazisNev()+";";
utasitas.executeUpdate(sql);

似乎并没有为执行后的所有语句设置use上下文。与其运行SQL来更改模式,不如将其直接附加到JDBC URL:

final String adatbazisURL = 
    "jdbc:mysql://localhost:3306/" +
    Azonositok.getAdatbazisNev().trim();

或者,您可以在执行过程名称之前将模式预先附加到过程名称中。

相关内容

最新更新