我用这种方式打开表, 更新记录
pstment = con.prepareStatement(strSql,
                                         ResultSet.TYPE_SCROLL_SENSITIVE,
                                         ResultSet.CONCUR_UPDATABLE);
          ResultSet rst = pstment.executeQuery(); rst.updateString("DELIVERTIME", dateStr);
              rst.updateRow();
用完后关闭
 pstment.close();
为什么还会出现这个错误?
java.sql.SQLException: ORA-01000: maximum open cursors exceeded at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Oopen.receive(Oopen.java:120)
at oracle.jdbc.ttc7.TTC7Protocol.open(TTC7Protocol.java:586)
at oracle.jdbc.driver.OracleStatement.<init>(OracleStatement.java:385)
at oracle.jdbc.driver.OracleStatement.<init>(OracleStatement.java:413)
at oracle.jdbc.driver.OraclePreparedStatement.<init>(OraclePreparedStatement.java:119)
at oracle.jdbc.driver.OraclePreparedStatement.<init>(OraclePreparedStatement.java:92)
at oracle.jdbc.driver.OracleConnection.privatePrepareStatement(OracleConnection.java:950)
at oracle.jdbc.driver.OracleConnection.prepareStatement(OracleConnection.java:802)
at oracle.jdbc.driver.ScrollableResultSet.prepare_refetch_statement(ScrollableResultSet.java:2380)
at oracle.jdbc.driver.ScrollableResultSet.refreshRowsInCache(ScrollableResultSet.java:292)
at oracle.jdbc.driver.UpdatableResultSet.execute_updateRow(UpdatableResultSet.java:2240)
at oracle.jdbc.driver.UpdatableResultSet.updateRow(UpdatableResultSet.java:1369)
at sms.app.service.post.HttpPostService.start(HttpPostService.java:135)
at sms.app.service.post.HttpPostService.run(HttpPostService.java:20)
at java.lang.Thread.run(Thread.java:534)

解决方案 »

  1.   

    是不是放在循环里了?或者
              ResultSet rst = pstment.executeQuery();
    返回的结果集记录很多吧?
      

  2.   

    darkattack(居士) 说的对,是放在循环里了,如何解决着个问题呀?
      

  3.   

    应该是你的程序问题,你的jdbc打开的游标超过了oracle配置的每个session允许打开的最大游标数
    如果确定你的程序没问题,修改oracle的配置参数
    可以这样
    dba 连接上数据库
    select value from v$parameter where name like '%open_cursors%',
    如果参数过小,将它调大一点
    alter system  set open_cursors=你设定的值;(oracle9i版本)
      

  4.   

    我知道是光标打开多了,最初只能打开1000个,后来我修改了一下程序,加上了pstment.close();
    目前发现错误是在 打开32745 次时出错