jdbc 调用oracle 的procedure ,查询的结果以游标返回,执行到抛出rs.next())时,抛出no more data from read socket。
请问是什么原因?
代码:
String dbUrl = "jdbc:oracle:thin:@192.168.10.12:1521:testDB";
String theUser = "username";
String thePw = "123456";
Connection c = null;
Statement conn;
ResultSet rs = null;
String tableSpace=" ";
try {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
c = DriverManager.getConnection(dbUrl, theUser, thePw);
conn = c.createStatement();
if(conn !=null){
String sqlstr = "{call pkg_IndicatorReport.procSIURawDataReport(?,?,?)}";
CallableStatement cstmt = c.prepareCall(sqlstr);
cstmt.setString(1, "2014-08-22");
cstmt.setString(2, "2014-09-23");
cstmt.registerOutParameter(3, oracle.jdbc.OracleTypes.CURSOR); //
cstmt.executeUpdate();
rs = (ResultSet) cstmt.getObject(3); //
System.out.println("report 1--------------------");
while (rs.next()) {
System.out.println(rs.getString("0") +tableSpace+ rs.getString("1")
); /
//System.out.println(rs.getString("s_date2"));
}
//conn.close();
// conn = null;
}
------解决思路----------------------
rs.next()是获取下一条记录,而不是判断是否还有记录,函数使用的不太对
------解决思路----------------------
仔细看了下你的代码,rs获取的是cursor游标类型,感觉不太对
游标本身是一个读取的接口,本身是不包含任何数据的,
不知道java执行cstmt.executeUpdate()之后是不是默认就断开连接了
如果断开连接的话,游标也就随之实效了
------解决思路----------------------
建议返回游标的创建语句,然后通过rs=stmt.executeQuery(sql)的方式获取数据