因为第三方数据的格式问题 ,不得不用如下方式处理,我这边是webservice的程序,为了避免浪费资源,在服务启动的时候就加载所需的数据库连接。
   for(){
      dbcon =  ((Connection) dbmap.get("con"));
      dbcon.createStatement().execute()    
      inSql = 插入语句
      ps = dbcon.prepareStatement(inSql);
       ......
      ps.close;
   }
connection是存到map里的,由于特殊性不得不用循环来处理,但我发现 dbcon.createStatement().execute()这个连接是没法关的,如果关了就把服务初始化的连接也给关了,但是不关闭的话就会超出打开游标的最大数,各位有其他好的解决方式吗?不要说把con.creaeteStatement放在循环外面哦。

解决方案 »

  1.   

    不要说把con.creaeteStatement放在循环外面哦。难道不行??
      

  2.   

    嗯   因为数据来的时候是不同的数据库,我要先在body里解析出哪个数据库的,接下来才能按条件做删除。
      

  3.   

    alter system set open_cursors=1000
      

  4.   

    dbcon.createStatement().execute()   
    这句想做什么?
      

  5.   

    for里面加一个判断,比如i%100 == 0 的时候就关闭连接,下一次取新连接
      

  6.   


    如果超过最大连接数,就从新取一个connection
      

  7.   

    像ps = dbcon.prepareStatement(inSql) 一样,new一个Statement对象,然后关闭会出问题?
      

  8.   

    dbcon.createStatement().execute()  这个Statement就没有关闭,所以才会报错。你要保证所有的Statement、ResultSet都正常关闭
      

  9.   

    不知道你有多少个数据库?不会超过10个吧,为什么不放到连接池里?这样关闭打开连接,都不会耗费资源,你执行dbcon.createStatement().execute()这个,而不关闭连接,肯定是浪费资源,而不是节约资源。换个思路解决问题。
      

  10.   

    允许部分commit吗?还是必须整体commit?
    如果可以部分commit,试试commit一下看看。
      

  11.   

    dbcon.createStatement().execute()   这里创建Statement的时候就相当于打开一个游标了,创建的时候给个引用,到循环的最后关闭一下!
    你的PreparedStatement是关闭了,但dbcon.createStatement().execute()这句中创建的就没有被关闭