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
En argument sont envoyés le nom du fichier texte importé et les caractéristiques d'import
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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();} } }
Partager