我正在关注可调用语句的指南。
在本指南中,它说我需要使用以下语句注册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;
答案 0 :(得分:2)
Out参数是传递给过程写入的SQL存储过程的参数。 在MySQL中,它也可以通过SET命令
完成SET out_param1 = value
有关其他示例,请参阅mysql stored-procedure: out parameter
registerOutParameter
会告诉JDBC驱动程序这是一个otuput参数,需要这样处理。例如。它需要使用特殊语法来调用过程并在调用语句后检索输出值
答案 1 :(得分:0)
registerOutParameter
用于在数据库服务器上创建一个变量ie sql types,因此用于存储值,并且可以使用java调用存储过程和函数上下文中的索引进行访问。
例如:
callableStatement.registerOutParameter(1, java.sql.Types.VARCHAR);
......
// get cursor and cast it to ResultSet
String var = callableStatement.getString(1);
在Oracle中:
callableStatement.registerOutParameter(1, OracleTypes.CURSOR);
// get cursor and cast it to ResultSet
ResultSet rs = (ResultSet) callableStatement.getObject(1);