4

我正在遵循有关可调用语句的指南。

在本指南中,它说我需要使用以下语句注册 out 参数:

callsts.registerOutParameter(2, java.sql.Types.VARCHAR);

问题:为什么我需要这样做/它有什么作用?

完整的Java代码:

String getcall = "{call gettitle (?,?)}";
CallableStatement callsts = connect.prepareCall(getcall);
int nID = 15;
callsts.setInt(1, nID);
callsts.registerOutParameter(2, java.sql.Types.VARCHAR);
callsts.execute();
String calltitle = callsts.getString(2);
System.out.println("Callable Stamement Title: "+calltitle);       

mySQL程序:

DELIMITER $$ 
DROP PROCEDURE IF EXISTS `nothingtowear`.`gettitle` $$
CREATE PROCEDURE  `nothingtowear`.`gettitle` (
IN nothingtowear_ID INT,
OUT nothingtowear_TITLE VARCHAR( 255 )) 
BEGIN 
SELECT Title INTO nothingtowear_TITLE
FROM articles
WHERE ID = nothingtowear_ID;
END $$
DELIMITER;
4

2 回答 2

5

输出参数是传递给过程写入的 SQL 存储过程的参数。在 MySQL 中,它也可以通过 SET 命令完成

SET out_param1 = value

另一个例子见mysql 存储过程:输出参数

registerOutParameter将告诉 JDBC 驱动程序这是一个 otuput 参数,需要这样处理。例如,它需要使用特殊语法来调用过程并在调用语句后检索输出值

于 2014-03-11T01:06:31.453 回答
1

registerOutParameter用于在数据库服务器上创建一个变量,即sql类型,因此用于存储值,并且可以在java中使用索引访问存储过程和函数上下文。

例如:

callableStatement.registerOutParameter(1, java.sql.Types.VARCHAR);
......
// get cursor and cast it to ResultSet
String var = callableStatement.getString(1);

在甲骨文中:

callableStatement.registerOutParameter(1, OracleTypes.CURSOR);
// get cursor and cast it to ResultSet
ResultSet rs = (ResultSet) callableStatement.getObject(1);
于 2016-08-03T01:34:59.020 回答