2016-09-28 2 views
0

Я написал java-программу о передаче файла txt в sqlite db, но требуется больше времени, когда около 83000 данных (200 данных занимают около 1 минуты). Как увеличить скорость передачи. Я попытался добавления ArrayList, чем получить, но его не изменитьJava txt to sqlite data data transfer как можно быстрее

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.Statement; 

public class NewMain { 

public static Connection connect() { 
    Connection conn = null; 
    try { 
     String url1 = "jdbc:sqlite:c:/Users/sozdemir/Desktop/sozluk.db"; 
     conn = DriverManager.getConnection(url1); 
     String sql1 = "CREATE TABLE IF NOT EXISTS KELIMELER (Kelime PRIMARYKEY NOT NULL);"; 
     Statement s = conn.createStatement(); 
     s.execute(sql1); 
    } catch (Exception e) { 
     System.out.println(e.getMessage()); 

    } 
    return conn; 
    } 

public void Verigir(String kelime){ 
String sql = "INSERT INTO KELIMELER (kelime) VALUES(?)"; 
    try (Connection conn = this.connect(); 
      PreparedStatement statement = conn.prepareStatement(sql) 
      ){ 
     statement.setString(1, kelime); 
     statement.executeUpdate(); 

    } catch (Exception e) { 
    } 


} 

public static void main(String[] args) throws IOException { 
/* connect();*/ 

    NewMain app = new NewMain();  
    String kelime = null; 
    BufferedReader in = null; 
    int adet; 
    adet= 0; 
    in = new BufferedReader(new FileReader("C://Users//sozdemir//Desktop//ozluk.txt")); 
    while ((kelime=in.readLine()) !=null) { 
     app.Verigir(kelime); 
    adet +=1; 
     System.out.println(81742 - adet); 
    }  
}  

}

+1

Проделать любое профилирование, чтобы увидеть, где происходит замедление? возможно, ваш код работает быстро и быстро занимает 0,000001% от времени выполнения, а другой 99.999999% ожидает sqlite. –

+0

Заключение в sqlite часть сокращает время, но я не знаю, как я могу увеличить –

+0

не подготавливать заявление каждый раз, то. одна из ОСНОВНЫХ точек инструкции make заключается в том, что служебные данные синтаксического анализа/компиляции выполняются только один раз, тогда вы просто заполняете заполнители столько раз, сколько необходимо. –

ответ

0

Некоторые подсказки:

  1. Используйте один prepareStatement
  2. Положите все внутри транзакции
  3. Использование ПРАГМА синхронном = OFF и PRAGMA journal_mode = ВЫКЛ

Это даст вам очень быстрые вставки.