懂java和oracle高手请进!

hushuangyang 2003-11-06 06:55:38
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;
...全文
46 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hushuangyang 2003-11-08
  • 打赏
  • 举报
回复
这个问题我自己已经解决。将 ResultSet rset = (ResultSet)call.getObject(2);改为
ResultSet rset = (ResultSet)call.getResultSet();即可。
lynx1111 2003-11-07
  • 打赏
  • 举报
回复
参考:
package com.bitc;

import java.sql.*;
import com.bitc.*;
import java.io.*;

public class NewAuAccTarget extends DBCon2
{
CallableStatement stmt=null;
String sql="{call Au_NewAccSort(?,?,?)}";
String AccNa="";
String AccId="";

public NewAuAccTarget()
{
super();
}

public void getParameter(String AccNa,String AccId)
{
this.AccNa=AccNa;
this.AccId=AccId;
}

public String getResult() throws Exception
{
stmt=con.prepareCall(sql);
stmt.setString(1,AccNa);
stmt.setString(2,AccId);
stmt.registerOutParameter(3,Types.VARCHAR);
stmt.executeUpdate();
//clearParameters();
String cMessage=stmt.getString(3);
return cMessage;
}

public void cleanup() throws Exception
{

if(stmt!=null)stmt.close();
}
}

还有一个bean,是父类
/*
*文件名:DBCon2.java
*创建时间:2002-12-15 by chen
*修改时间:
*功能描述:创建数据库连接,且为其它Bean的父类。
*/

package com.bitc;
import java.sql.*;
import java.io.*;

public abstract class DBCon2
{
Connection con = null;
public DBCon2()
{

}
public void BuildConnection()
{
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:AuditDB","system","manager");
}catch(Exception e){}
}
public abstract void cleanup() throws Exception;
public void takeDown() throws Exception
{
cleanup();
con.close();
}
}

hushuangyang 2003-11-07
  • 打赏
  • 举报
回复
to liyeying:
ResultSet rset = (ResultSet)call.getObject(2);
我用jdb调试,看出来rset为NULL。
liyeying 2003-11-06
  • 打赏
  • 举报
回复
ResultSet rset = (ResultSet)call.getObject(2);

while (rset.next ()){
System.out.println (rset.getInt ("DEPTNO") + " "
+ rset.getString ("DNAME") + " "
+ rset.getString ("LOC"));
}

改成call.getInt("DEPTNO");

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧