IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

Ralentissement d'eclipse suite à insert into suite


Sujet :

JDBC Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Points : 386
    Points
    386
    Par défaut 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 : 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();} 
     
    	}
    }
    En argument sont envoyés le nom du fichier texte importé et les caractéristiques d'import

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Points : 386
    Points
    386
    Par défaut
    Solution: pb de connexion non close

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] insertion bdd suite a une boucle foreach
    Par Klink dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 12/01/2013, 16h36
  2. Réponses: 8
    Dernier message: 04/06/2009, 15h53
  3. [MySQL] Doublons suite à insertions
    Par razorlok dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 10/06/2008, 00h14
  4. Ralentissement d'eclipse suite à insert into
    Par Mengué georges dans le forum JDBC
    Réponses: 2
    Dernier message: 03/05/2007, 13h31
  5. [10g] erreur ORA-01652 suite à INSERT-SELECT
    Par TG37140 dans le forum Administration
    Réponses: 5
    Dernier message: 18/12/2006, 19h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo