2012-03-22 16 views
0

いくつかの情報をOracle DBからSQLite DBにコピーするコードを実装するように求められました。私はOracleからResultSetを取得してSQLiteに挿入し始めますが、それは本当に遅いです。よりよい方法がありますか、これを達成するためのよりよい方法を提案できますか?以下のようにJavaからSQLiteへのコピー

私のコードでは、なります

OracleDB oracleDB = new OracleDB(); 
    SQLiteDB sqliteDB = new SQLiteDB(); 


    oracleConnection = oracleDB.connect(); 
    sqliteConnection = sqliteDB.connect(); 
    { 
     Statement s = null; 
     PreparedStatement ps = null; 
     try { 
      s = sqliteConnection.createStatement(); 
      s.executeUpdate("CREATE TABLE IF NOT EXISTS test_table (field1, field2)"); 

      ps = oracleConnection.prepareStatement("SELECT * FROM temp_desarrollo"); 
      ResultSet rs = ps.executeQuery(); 

      while (rs.next()) { 
       ps = sqliteConnection.prepareStatement("INSERT INTO test_table VALUES (?, ?)"); 
       //SET PARAMETERS 
       ps.setString(1, rs.getString(1)); 
       ps.setString(2, rs.getString(2)); 
       ps.executeUpdate(); 
      } 

     } catch (SQLException ex) { 
      Logger.getLogger(OracleToSQLite.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
    oracleDB.disconnect(oracleConnection); 
    sqliteDB.disconnect(sqliteConnection); 
+1

ループの外側でinsert文を1回だけ準備する必要があります。 –

+0

OK、ありがとうございました。しかし、まだ私の質問は残っている、より良い方法はありますか? – BRabbit27

答えて

1

はこちらをご覧http://www.zentus.com/sqlitejdbc/usage.html

を持っている私はこれを使用したことがないが、Oracleに多数の行を挿入するとき、私はどうなる最初のものは、以下のとおりです。

  1. セットの自動コミット= falseを
  2. 使用アレー/バッチインサート

私はsqliteバッチインサートのためにgoogledと上のページは、それが可能であることを示していました。私はそれがあなたのために物事を速くするかどうか聞くことに興味があります。

+0

パフォーマンスが大幅に向上します。どうもありがとう!ちょうどもう1つの質問ですが、バッチにステートメントが追加されていますか? – BRabbit27

+1

さて、ハードな制限ではないかもしれませんが、常識が勝つはずです。バッチでステージングする各レコードは、JVMで少しのメモリを使用します。通常、私は1000のバッチで作業しますが、あなたの特定のアプリケーションを試して何が最も効果的かを確認する価値があります。 –

1

私はあなたが持っているものだと思うが、おそらく「1つのオフ」、または臨時のテーブルのコピーのためにOKです。

ます。また、リンクテーブルを作成し、「select intoを」行うことを検討することをお勧めします:

https://forums.oracle.com/forums/thread.jspa?threadID=846516

PS:ヴィンセントマルグラットが提案 として - 、ループの外で「準備」に移動があまりにも:)

1

一般に、バッチ処理では、db(PreparedStatement.addBatch())に挿入するときにパフォーマンスが向上します。

関連する問題