orcal存储过程(二)

2014-11-24 13:09:11 · 作者: · 浏览: 1
name,password
from test1';
OPEN p_rc FOR sqlstr;-- USING p_id
END IF;
END get;
END pkg_test;
/ --该斜线不可省略,否则有错
3.6 Java调用:

Session oracleSession = HibernateSessionFactory.getSession(); //Hibernate Session
Connection conn = oracleSession.connection(); //获取Oracle Connection
try {
CallableStatement proc = conn.prepareCall("{ call TESTA( ) }"); //调用无返回值的存储过程TESTA
proc.setString(1, "ss"); //设置存储过程中定义的参数,参数从1开始
oracleSession.beginTransaction();
proc.execute(); //运行存储过程
oracleSession.getTransaction().commit();

proc = conn.prepareCall("{ call pkg_test.get( , ) }"); //调用返回列表的存储过程
proc.setInt(1, 1); //设置存储过程的参数,从1开始
proc.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);
oracleSession.beginTransaction();
proc.execute(); //执行存储过程
oracleSession.getTransaction().commit();
ResultSet rs = (ResultSet) proc.getObject(2); //获取返回值,该处的2与存储过程定义时的输出参数位置对应。
StringBuilder result = new StringBuilder();
result.append("

");
while (rs.next()) {
result.append(" ");
} // rs.getString(1)对应查询结果的第一列
result.append("
" + rs.getString(1) + " "
+ rs.getString(2) + "
");
request.setAttribute("result", result.toString());

} catch (Exception e) {
e.printStackTrace();
}