当前位置: 代码迷 >> Oracle开发 >> jdbc 调用oracle 的procedure ,查询的结果以游标回到,抛出no more data from read socket
  详细解决方案

jdbc 调用oracle 的procedure ,查询的结果以游标回到,抛出no more data from read socket

热度:81   发布时间:2016-04-24 06:32:42.0
jdbc 调用oracle 的procedure ,查询的结果以游标返回,抛出no more data from read socket。
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)的方式获取数据
  相关解决方案