igeilpijan 2013-04-18 16:16
浏览 478
已采纳

ora-01000 超出打开游标的最大数

这是一个老问题,网上也有很多关于这个问题的原因和解决方法,一般都是说在循环里面使用PrepareStatement或ResultSet后没有及时关闭引起的。
我现在的问题是,我使用的是Sptring的Jdbctemplate来执行查询操作(我也看了Jdbctemplate的代码,甚至将源代码复制出来自己再添加输出信息,确定PerpareStatement确实是有关闭,奇怪的是似乎执行关闭的次数要少于实际执行查询的次数),所以我不能自己调用方法关闭PrepareStatement或ResultSet,那问题应该怎么解决呢?

附功能需求:
查询某些数据点(最大300个左右),在某个时间范围内(最大1年左右),哪一天没有数据。例如:查询300个点,在2013-04-10至2013-04-17日这10天之中,有多少是没有数据的,如果没有任何数据,则返回300*10=3000条数据,且这3000条数据必须有时间,如第1条的内容是“点A在2013-04-10没有数据”,第2条的内容是“点B在2013-04-10没有数据”...第XX条是“点A在2013-04-11没有数据”,以此类推。
上面这需求,除了将具体的时间赋值到SQL语句的查询条件中之外,没有想出其他方法。如果查询1年的时间范围,那就要执行360+条SQL语句,就会出现上面提到的错误。

  • 写回答

3条回答 默认 最新

  • Dead_Knight 2013-04-18 16:30
    关注

    通过oracle的connect by来产生日期临时表,然后关联你的业务表,进行分组查询,不是更简单么?如:
    [code="java"]
    select (to_date('2012-12-01', 'yyyy-mm-dd') + level - 1) as create_time
    from dual
    connect by level <=
    to_date('2013-05-01', 'yyyy-mm-dd') -
    to_date('2012-12-01', 'yyyy-mm-dd') + 1
    [/code]
    这也是前面某位想出来的,或许你可以用到

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64
  • ¥15 iOS 自定义输入法-第三方输入法
  • ¥15 很想要一个很好的答案或提示
  • ¥15 扫描项目中发现AndroidOS.Agent、Android/SmsThief.LI!tr
  • ¥15 怀疑手机被监控,请问怎么解决和防止
  • ¥15 Qt下使用tcp获取数据的详细操作
  • ¥15 idea右下角设置编码是灰色的
  • ¥15 全志H618ROM新增分区