开发语言:JAVA ,JDBC
数据库:Oracle 9/10
问题描述:
   在开发一个模块的时候,需要用到同时批量更新或者插入上万条数据,
   由于批量更新和插入的SQL语句涉及到不同的表和不同的字段,就是SQL语句不确定,每条都可能是不同的,所以不能用PrepareStatement,而不得不用Statement的addBetch()
   但是用statement的话,效率非常低,有什么方法可以解决statement的效率问题。

解决方案 »

  1.   

    既然你要批量操作,那么排除变量值的不同,你的statement总是可以分为几类。所以,你总是可以在循环外定义几类PreparedStatement,因为PreparedStatement在数据库是有消耗的。这对批量update更为有效。
    如果你的批量操作没有顺序要求,那么可以不使用循环而用PreparedStatement的addBatch.另一方面,你也可以开发存储过程,一次性传入一批数据,由它解析并用forall等方法完成批量操作。
      

  2.   

    个人认为如果每一条更新与句都不一样的话,及时批量提交给oracle去处理,
    也不会得到很好的性能。
    所以首先还是从应用的角度,重新规划一下为好。
      

  3.   

    存储过程!
    就是没明白你的“SQL语句不确定”啥意思?呵呵!你的表和字段都是定的,sql怎会不定?呵呵!
      

  4.   

    比如PrepareStatement的SQL语句是 insert table (a,b,c) value (?,?,?)
    或者
    update table set a = *** where b = * and c = * 而我这里是table和 a,b,c 都是变化的。