繁体   English   中英

从存储过程中检索Java对象

[英]retrieve a Java object from stored procedure

我是一名学生,刚接触Java和存储过程。 我正在尝试编写一个存储过程,该存储过程应该将表行作为java对象返回。

我有这个表:USER_TABLE(USERID,USERNAME,DOB)

&步骤是:

 create or replace procedure "USER_OUT" (USERID in varchar2,UserObj out User)
 is 
 begin
 select * from user_table where 
 USERID = UserObj.USERID;

 end USER_OUT;

在Java中,我试图调用此过程并将对象检索为:-

CallableStatement callableStatement = dh.con.prepareCall("{call USER_OUT(?)}");
User usr = new User();
callableStatement .setInt (1,"123");
usr1 = (User)callableStatement.getResultSet();
callableStatement.registerOutParameter(1, OracleTypes.CURSOR);
callableStatement.executeUpdate();//getting exception as Object is invalid.

程序执行错误还是我遗漏了什么? 任何帮助都非常感谢! 谢谢。

我认为您应该尝试通过传递用户ID来获取值。

CallableStatement callableStatement = dh.con.prepareCall("{call USER_OUT(?,?)}");
callableStatement.setString(1, "123");
callableStatement.setString(2, OracleTypes.CURSOR);//use OracleTypes.CURSOR
callableStatement.executeUpdate();//execute USER_OUT store procedure
//read the OUT parameter now
// get cursor and cast it to ResultSet
ResultSet rs = (ResultSet) callableStatement.getObject(2);
while (rs.next()) {
String userid = rs.getString(1);
...............................
}

您可能不需要该行:

callableStatement.registerOutParameter(1, OracleTypes.CURSOR);

我不是Oracle专家,但我会想到以下内容:

create or replace procedure "USER_OUT" (pUSERID in varchar2)
is 
begin
select USERID, USERNAME, DOB from user_table
where USERID = pUSERID;
end

CallableStatement callableStatement = dh.con.prepareCall("{call USER_OUT(?)}");
callableStatement.setString("pUSERID","123");

ResultSet rs = callableStatement.executeQuery();
rs.next();
// Assuming you have a constructor that takes all parameter in
User usr = new User(rs.getInt("USERID"), rs.getString("USERNAME"), rs.getString("DOB"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM