【问题标题】:retrieve a Java object from stored procedure从存储过程中检索 Java 对象
【发布时间】:2015-07-20 12:16:48
【问题描述】:

我是一名学生,刚接触 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.

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

【问题讨论】:

  • call USER_OUT(?)}只有一个参数。
  • 我认为这会有所帮助:stackoverflow.com/questions/21956042/…
  • 对不起,我只是在尝试,我使用了 ("{call USER_OUT(?,?)}");也。
  • 如何在 SQL 中像这样使用 Java 'User' 类型?为什么 USERID 是一个可接受的参数(但后来没有使用)? SP 本身是.. 有问题的。

标签: java sql stored-procedures


【解决方案1】:

我认为您应该尝试通过传递用户 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);
...............................
}

【讨论】:

    【解决方案2】:

    你可能不需要那行:

    callableStatement.registerOutParameter(1, OracleTypes.CURSOR);
    

    我不是甲骨文的人,但我会想到这样的事情:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 2019-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多