懂java和oracle高手请进!
1我建立一个java程序调用存储过程并且通过存储过程返回结果集,在sql端执行存储过程没有错误并且能够返回结果集,但是在java里面调用的话执行到while (rset.next ())时这个 rset.next ()为NULL!
java代码如下:
import java.sql.*;
public class refcursor {
public static void main(String[] args) {
String dbUrl = "jdbc:odbc:ora9i";
String user = "scott";
String password = "tiger";
try {
// Load the driver (registers itself)
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection(dbUrl, user, password);
CallableStatement call = conn.prepareCall ("{ call scott.customers.dept_listing (?,?)}");
call.setString (1, "*");
call.registerOutParameter (2, Types.OTHER);
call.execute ();
ResultSet rset = (ResultSet)call.getObject(2);
while (rset.next ()){
System.out.println (rset.getInt ("DEPTNO") + " "
+ rset.getString ("DNAME") + " "
+ rset.getString ("LOC"));
}
rset.close();
call.close();
conn.close();
} catch(Exception e) { e.printStackTrace();}
}
} ///:~
sql 代码如下:如果你有oracle的话可以试试:
create or replace package Customers
as
type refcursor is ref cursor;
procedure dept_listing(inname in char,deptcursor out refcursor);
end Customers;
create or replace package body Customers as
procedure dept_listing(inname in char,deptcursor out refcursor)
is
begin
open deptcursor for select * from dept;
end dept_listing;
end Customers;