2017-01-30 9 views
-3

私はディスクからファイルをロードしています。レコードは9,00,000件あります。ファイルを1行ずつ読み込んで処理してから、Javaオブジェクトに設定しています。各レコードに対して、以下のコードが実行されています1回の更新と1つの選択クエリ)スレッド "main"の例外java.lang.OutOfMemoryError:oracle.jdbc.driver.OracleSqlのJavaヒープ・スペース。 <init>

  try 
      { 

      if(conn != null) 
      { 

       selectPrepareStatement.setString(1, someValue); 
       selectPrepareStatement.setMaxRows(1); 

       rs = selectPrepareStatement.executeQuery(); 
       String secondaryCIF = null; 
       insertPreparedStatement.setInt(1, vo.getRecordType()); 
       insertPreparedStatement.setString(2, vo.getRefType()); 
       insertPreparedStatement.setString(3, vo.getCustOwnershipType()); 
       insertPreparedStatement.setString(4, vo.getTin()); 
       insertPreparedStatement.setString(5, vo.getCifId()); 
       insertPreparedStatement.setString(6, vo.getPrimaryOrSecondary()); 

       Statement statement = conn.createStatement(); 

        if(vo.getPrimaryOrSecondary().equals("P")) 
        { 
         updatedCount = statement.executeUpdate("update table_name set col1='"+value1+"' where col2= '"+value2)+"'");       

         updatedCount = statement.executeUpdate(); 

        }else if(vo.getPrimaryOrSecondary().equals("S")) 
        { 
          updatedCount = statement.executeUpdate("update table_name set col3='"+value3+"' where CUST_CIN = '"+value1+"'"); 
          updatedCount = statement.executeUpdate(); 
        }     


       insertPreparedStatement.setInt(8, updatedCount); 
       insertPreparedStatement.setString(9, null); 

       insertPreparedStatement.executeUpdate(); 
       } 

      if(rs != null) 
      { 
       rs.close(); 
      }    

     }catch(Exception e) 
     { 

     } 

私は3,00,000は、いくつかのいずれかをrecords.Canした後、エラーを取得し、1ギガバイトにヒープ領域を増やす場合は、この上で私を助けてください?

すべてのpreparedstatementおよび変数は、グローバルおよび静的として宣言されています。

+5

このような評判の高いユーザーから、このような不適切な質問が表示されることに私は非常に驚いています – Andremoniy

+0

このファイルのサイズ(MB単位)は?各繰り返しに何かを保存していますか? – AxelH

+1

何が欠けていますか - DBクエリを実行しているコード行は、それが必須です – Andremoniy

答えて

2

通常、DBセッションのすべてのデータは、フラッシュまたはコミットするまでメモリに格納されるため、N行ごとにDBセッションをフラッシュする必要があります。

しかし、非常に悪い形式の質問(コードの最も重要な部分が省略されている)のために、私はあなたにもっとアドバイスすることはできません。

+0

返事ありがとうございます。すべての申し訳ありませんが悪い公式質問。私のネットは、この質問を投稿して明日、 – PSR

+0

実際にはここで私はjdbc.Doを使用してJDBCでフラッシュする考えですか? – PSR

+0

JDBCフラッシュではコミットしていますか? – PSR

関連する問題