0

我在mysql中有一个带有签名的程序

"coursePK bigint(20), groupName varchar(1000), userPK bigint(20), newClassPK bigint(20), assignmentFlag varchar(1), rosterFlag varchar(1), gradebookFlag varchar(1), isHavingMasterClass varchar(1), OUT newBookPK bigint(20)"

该过程的末尾有Start transaction和语句。Commit提交后,我正在设置 OUT 参数的值。

现在,我的 java 代码使用 Callable 语句来调用过程,当我使用callableStatement.getString(index)or获取 out 参数callableStatement.getInt(index)时,我总是分别得到 null 和 0。

但是当我从 mysql 查询浏览器执行该过程并SELECT newBookPK在末尾添加该行时,我得到了正确的输出参数。

所以请帮助我从 Java 代码中获得正确的值。

我在从 JAVA 获取输出参数时出错的地方。

这是java代码:

callableStatement = conn.prepareCall("{call copy_custombook_details(?,?,?,?,?,?,?,?,?)}"); //coursePK bigint(20), groupName varchar(1000), userPK bigint(20), newClassPK bigint(20), assignmentFlag varchar(1), rosterFlag varchar(1), gradebookFlag varchar(1), isHavingMasterClass varchar(1), OUT newBookPK bigint(20)
count=1;
callableStatement.setString(count++, coursePK);
callableStatement.setString(count++, groupName);
callableStatement.setString(count++, userPK);
callableStatement.setString(count++, newClassPK);
callableStatement.setString(count++, "N");
callableStatement.setString(count++, "N");
callableStatement.setString(count++, "N");
callableStatement.setString(count++, isHavingMasterClass);
callableStatement.registerOutParameter(count++, Types.VARCHAR);
callableStatement.execute();
newBookPK = callableStatement.getString(9);
4

2 回答 2

0

问题的路由原因在 mysql 过程签名中。如果程序中有 OUT 参数,则应在 IN 参数之前定义

在您的情况下,程序签名需要更改为

OUT newBookPK bigint(20), coursePK bigint(20), groupName varchar(1000), userPK bigint(20), newClassPK bigint(20), assignmentFlag varchar(1), rosterFlag varchar(1), gradebookFlag varchar(1), isHavingMasterClass varchar(1)

并且java代码需要根据该顺序进行更改。

于 2013-12-11T12:57:52.220 回答
0

When I am executing the procedure from mysql query browser ...
而且,在您的 java 代码中,您在哪里调用来执行该语句?

介于两者之间

callableStatement.registerOutParameter(count++, Types.VARCHAR);
newBookPK = callableStatement.getString(9);

包括

callableStatement.execute();

然后getString( 9 )应该返回所需的东西。

于 2012-05-18T11:11:50.237 回答