2015-07-20 55 views
1

我是一名学生,是Java和存储过程的新成员。 我想写一个应该返回一个表格作为Java对象的存储过程。从存储过程中检索Java对象

我有这个表: USER_TABLE(用户标识,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. 

的程序是错误的实现还是我失去了一些东西? 任何帮助真的很感激! 谢谢。

+0

'调用USER_OUT(?)}'只有一个参数。 – Satya

+0

我认为这将是有益的:http://stackoverflow.com/questions/21956042/mapping-a-jdbc-resultset-to-an-object –

+0

对不起,我只是试图说出来,我用(“{call USER_OUT (?,?)}“);也。 – zy31

回答

0

我想你会想通过传递用户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); 
............................... 
} 
0

你也许并不需要这一行:

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"));