当前位置: 技术问答>java相关
java调用oracle存储过程的简单问题
来源: 互联网 发布时间:2015-06-22
本文导语: 由于刚开始接触oracle,对oracle的存储过程调用还不了解,请大虾们指点。 删除和修改的存储过程调用我会了, 但是select的怎么做都测试不成功,实在是搞不懂,怎样才能返回一个可用ResultSet对象。 请有经验的朋友...
由于刚开始接触oracle,对oracle的存储过程调用还不了解,请大虾们指点。
删除和修改的存储过程调用我会了, 但是select的怎么做都测试不成功,实在是搞不懂,怎样才能返回一个可用ResultSet对象。
请有经验的朋友给我一个简单的例子瞧瞧。
删除和修改的存储过程调用我会了, 但是select的怎么做都测试不成功,实在是搞不懂,怎样才能返回一个可用ResultSet对象。
请有经验的朋友给我一个简单的例子瞧瞧。
|
To zhou1977(短笛) :
我的那个做法是可行的,只是我当时对Oracle的存储过程不是很熟悉,一开始希望可以像SQL Server那样直接通过存储过程来获得记录集,也想知道更多的方法而已,但其实这样的想法对Oracle是行不通的,必须采用Package、package body来实现返回记录集!
Good luck!
我的那个做法是可行的,只是我当时对Oracle的存储过程不是很熟悉,一开始希望可以像SQL Server那样直接通过存储过程来获得记录集,也想知道更多的方法而已,但其实这样的想法对Oracle是行不通的,必须采用Package、package body来实现返回记录集!
Good luck!
|
我就不多说了
...
StringBuffer sql = new StringBuffer("SELECT name,... FROM ....");
pstmt = conn.prepareStatement(sql.toString());
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println(rs.get("name"));
...
}
...
StringBuffer sql = new StringBuffer("SELECT name,... FROM ....");
pstmt = conn.prepareStatement(sql.toString());
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
System.out.println(rs.get("name"));
...
}
|
请问用存储过程得到ResultSet,比一般的select得到好在哪里?好像没有看到过这样的用法。
|
Stored procedure with Input/Output parms and a ResultSet
Thanks to T. Guirado for the tips. public static int storedProcWithResultSet (String parms) throws Exception
// Stored procedure to be called.
CallableStatement cs = conn.prepareCall
("{? = call mypackage.p_astoreproc (?,?,?,?,?,?,?)}");
// register input parameters
cs.registerOutParameter(1, java.sql.Types.INTEGER); // return code
cs.setString(2, "");
cs.setString(3, "");
cs.setString(4, parms);
// regsiter ouput parameters
cs.registerOutParameter(5, java.sql.Types.CHAR);
cs.registerOutParameter(6, java.sql.Types.CHAR);
cs.registerOutParameter(7, java.sql.Types.CHAR);
// Procedure execution
ResultSet rs = cs.executeQuery();
// Note that you need to retrieve the ResultSet _before_ retrieving
// OUTPUT parameters.
if ( rs == null)
System.out.println( "No resultSet!");
else {
// To retrieve columns info.
ResultSetMetaData rsmd = rs.getMetaData();
int nbCol = rsmd.getColumnCount();
int i = 0;
int j = 1;
Vector vResSet = new Vector();
while (rs.next ()) {
System.out.println( "Record " + (i+1));
// putting the ResultSet columns in a vector
for ( j = 1; j
Thanks to T. Guirado for the tips. public static int storedProcWithResultSet (String parms) throws Exception
// Stored procedure to be called.
CallableStatement cs = conn.prepareCall
("{? = call mypackage.p_astoreproc (?,?,?,?,?,?,?)}");
// register input parameters
cs.registerOutParameter(1, java.sql.Types.INTEGER); // return code
cs.setString(2, "");
cs.setString(3, "");
cs.setString(4, parms);
// regsiter ouput parameters
cs.registerOutParameter(5, java.sql.Types.CHAR);
cs.registerOutParameter(6, java.sql.Types.CHAR);
cs.registerOutParameter(7, java.sql.Types.CHAR);
// Procedure execution
ResultSet rs = cs.executeQuery();
// Note that you need to retrieve the ResultSet _before_ retrieving
// OUTPUT parameters.
if ( rs == null)
System.out.println( "No resultSet!");
else {
// To retrieve columns info.
ResultSetMetaData rsmd = rs.getMetaData();
int nbCol = rsmd.getColumnCount();
int i = 0;
int j = 1;
Vector vResSet = new Vector();
while (rs.next ()) {
System.out.println( "Record " + (i+1));
// putting the ResultSet columns in a vector
for ( j = 1; j