Ralentissement d'eclipse suite à insert into suite
Bonjour
Comme sugéré j'ai ajouté un PreparedStatement mais j'ai toujours le même pb à savoir qu'une fois les 10 à 20 000 lignes insérées je n'ai plus qu'à fermer et réouvrir eclipse pour pouvoir reprendre la main.
Ci-joint le code au cas ou quelqu'un aurait une idée
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
package librairie;
import java.io.*;
import java.sql.*;
import java.util.*;
import java.util.regex .*;
public class Flux_2 {
public static void main(Statement stmt, Connection conn, String fichier, String[] val) {
String nom_tbl = val[2];
String sep_chp = val[3];
String titre_col = val[4];
String def_tbl = val[6];
String[] num_chp = val[7].split("[|]");
Integer nb_chp = 0;
Integer cpt = 0;
String sql = "";
String valeur = "";
//StringBuffer sql0 = new StringBuffer();
//Iterator itersql = null;
PreparedStatement pstmt = null;
for(int i=0;i<num_chp.length;i++){sql += "?, ";}
sql = sql.substring(0,sql.length()-2);
try{pstmt = conn.prepareStatement("INSERT INTO "+nom_tbl+" VALUES ( "+sql+")");}
catch (final SQLException e){System.out.println("Flux_2.1: "+e);};
if(val[8].equals("no_concat"))
{//suppression de l'ancienne table
}
try
{InputStream ips=new FileInputStream(fichier);
InputStreamReader ipsr=new InputStreamReader(ips);
BufferedReader br=new BufferedReader(ipsr);
String ligne;
//lecture ligne à ligne
while ((ligne=br.readLine())!=null)
{//nbre de colonnes dans la ligne importée la première ligne est prise comme référence
if(ligne.split("["+sep_chp+"]").length > nb_chp){nb_chp = ligne.split("["+sep_chp+"]").length;}
//découpage de la ligne suivant le séparateur SEP_CHP
//découpage
val = ligne.split("["+sep_chp+"]", 0);
//si la taille de val < nb_chp > ligne avec retour chariot
while(val.length<nb_chp)
{ligne += br.readLine();
val = ligne.split("["+sep_chp+"]", 0);}
//si la ligne finit par le séparateur on ajoute " "
if(ligne.substring(ligne.length()-1, ligne.length()).equals(sep_chp))ligne=ligne+" ";
val = ligne.split("["+sep_chp+"]", 0);
//extraction et construction de la rqte d'insertion
for(int i=0;i<num_chp.length;i++)
{valeur = val[Integer.parseInt(num_chp[i], 10)-1];
//if(valeur.equals("")||valeur.equals(" ")){valeur = null;}
//System.out.println(num_chp[i]+" - "+valeur);
pstmt.setString(i+1, valeur);}
//ajout au batch
pstmt.addBatch();
System.out.println("Sql: "+pstmt.toString());
//insertion du batch
if(++cpt == 1000)
{//toutes les 1000 lignes j'execute le batch
pstmt.executeBatch();
pstmt.clearBatch();
conn.commit();
cpt = 0;}
}
pstmt.executeBatch();
pstmt.clearBatch();
conn.commit();
br.close();
}
catch (Exception e) {System.err.print("Flux_2.2:");e.printStackTrace();System.err.println();}
}
} |
En argument sont envoyés le nom du fichier texte importé et les caractéristiques d'import