2011-06-23 6 views
0

1,00,215行以上の挿入操作を実行すると、1,00,105行しか書き込まれません。SQLiteで予想以上に少ない行が書かれている

バッファまたはキャッシュメモリに問題はありますか?これは問題の場合、どのようにメモリのサイズを増やすのですか?

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Statement; 

import com.csvreader.CsvReader; 

public class CSVStoreData 
{ 
    Connection con=null; 
    ResultSet rs=null; 
    Statement smt = null; 

    public void insertData(String path) 
    { 
     try 
     { 
      Class.forName("SQLite.JDBCDriver"); 
      con = DriverManager.getConnection("jdbc:sqlite:/D:\\DB\\Mediation.db"); 
      con.setAutoCommit(false); 
      smt = con.createStatement(); 
      CsvReader filereader = new CsvReader(path,','); 
      filereader.readHeaders(); 
      long startTime = System.currentTimeMillis(); 
      while(filereader.readRecord()) 
      { 
       String query="insert into CDRData values('"+filereader.get(0)+"','"+filereader.get(1)+"','"+filereader.get(2)+"','"+filereader.get(3)+"','"+filereader.get(4)+"','"+filereader.get(5)+"','"+filereader.get(6)+"','"+filereader.get(7)+"','"+filereader.get(8)+"','"+filereader.get(9)+"','"+filereader.get(10)+"','"+filereader.get(11)+"','"+filereader.get(12)+"','"+filereader.get(13)+"','"+filereader.get(14)+"','"+filereader.get(15)+"','"+filereader.get(16)+"','"+filereader.get(17)+"','"+filereader.get(18)+"','"+filereader.get(19)+"','"+filereader.get(20)+"','"+filereader.get(21)+"','"+filereader.get(22)+"')"; 
       //System.out.println(filereader.get(0)+","+filereader.get(1)+","+filereader.get(2)+","+filereader.get(3)+","+filereader.get(4)+","+filereader.get(5)+","+filereader.get(6)+","+filereader.get(7)+","+filereader.get(8)+","+filereader.get(9)+","+filereader.get(10)+","+filereader.get(11)+","+filereader.get(12)+","+filereader.get(13)+","+filereader.get(14)+","+filereader.get(15)+","+filereader.get(16)+","+filereader.get(17)+","+filereader.get(18)+","+filereader.get(19)+","+filereader.get(20)+","+filereader.get(21)+","+filereader.get(22)); 
       smt.executeUpdate(query); 
       // System.out.println("\n"); 
      } 
      System.out.println("Record Inserted"); 
      long finishTime = System.currentTimeMillis(); 
      System.out.println("The time taken by insert query : "+(finishTime-startTime)+ " ms"); 
      con.commit(); 
     } 
     catch(Exception e) 
     { 
      System.out.println("Error ---- "+e); 
     } 
    } 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     CSVStoreData csvdata = new CSVStoreData(); 
     csvdata.insertData("D:\\CDRfile\\110527_160001.cdr"); 
    } 
} 
+0

あなたはエラーを投稿できますか? – Cris

+0

エラーは発生しませんが、他のレコードがあるところでのみ1,00,105までのレコードを書き込みます –

+1

BerkeleyDBではなくSQLiteを使用しているようです。 – Dmitri

答えて

1

SQLiteデータベースの最大サイズを超えている可能性があります。 http://www.sqlite.org/limits.html(特に、最後の2つの段落)をチェックしてください。最大ページ数とページサイズの設定によっては、テーブルの最大行数を超えていないこともありますが、データベースの最大サイズを超えている可能性があります。

http://www.sqlite.org/pragma.html#pragma_max_page_countおよびhttp://www.sqlite.org/pragma.html#pragma_page_sizeも参照すると便利です。

これらの値を確認し、入手したものを教えてください。

関連する問題