Importer les données depuis un fichier csv vers mysql

Résolu
cs_laritta Messages postés 11 Date d'inscription mercredi 17 août 2011 Statut Membre Dernière intervention 27 décembre 2011 - 17 août 2011 à 15:32
cs_laritta Messages postés 11 Date d'inscription mercredi 17 août 2011 Statut Membre Dernière intervention 27 décembre 2011 - 20 août 2011 à 00:40
Slt tout le monde,

Je suis débutante en programmation et j'ai un projet à réaliser en java. Ce projet consiste à stocker les données d'un fichier excel dans ma BD pourqu'elles puissent être traitées après.

J'ai réussi la conversion du fichier de format excel vers le format csv. Maintenant, je me suis bloquée au niveau de l'importation des données vers ma BD myqsl.

Si qlq peut me donner un coup de pouce je lui en serait reconnaissante.(Je ne sais même pas par quoi je dois commencer)

16 réponses

cs_laritta Messages postés 11 Date d'inscription mercredi 17 août 2011 Statut Membre Dernière intervention 27 décembre 2011 2
20 août 2011 à 00:40
Bonjour,

Merci bien pour votre aide j'ai rectifie le code et maintenant Ça marche très bien.

Bon mon premier problème résidait en la ligne suivante: stmt.executeQuery(query);
Cette ligne retourne normalement un résultat alors que la requête laod ne retourne rien donc il faut la remplacer par :stmt.execute(query);

Aussi j'avais une erreur au niveau de la requête : il faut 4 antislash et non pas 2

Cordialement
2
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
17 août 2011 à 18:51
Bonjour,

Dis nous ce que tu sais sur le sujet et essaye d'être plus précise. Explique nous ce qui te poses problème précisément.

Pour débuter, tu dois installer un SGBD sur ton poste de travail : mySQL et ajouter le .jar qui te permet de faire la connexion à une base de données dans le build path de ton projet odbc (télécharges le sur internet).

Ensuite, tu trouveras des tutoriels sur internet (en particulier celui du site du zero) qui t'expliquera comment connecter ton appli à la base et voilà.

Poses d'autres questions une fois que tu auras fait ca ou si ca nbe marche pas.
1
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
17 août 2011 à 18:52
salut ;o) ...
ben ca doit pas etre bien difficile vu que MySQL integre deja des fonction d import de fichier CSV ;o) ...
Donc si tu veux absolument le faire en java ;o) il te faut le connector JDBC correspond à ton SGBDR puis faire quelques ligne de code pour te connecter à ta base (exemple nombreux sur le site) et lancer la commande SQL d import... ;o) (il me semble que c est 'LOAD', à vérifier) ;o)

GL

GodConan ;o)
0
cs_laritta Messages postés 11 Date d'inscription mercredi 17 août 2011 Statut Membre Dernière intervention 27 décembre 2011 2
18 août 2011 à 13:42
Bonjour Julien,

D'abord merci bien de m'avoir répondu.

Bon, je vais parler de mon sujet et puis je vais determiner là où je me bolque. Alors, mon application consiste à faire le reporting téléphonique : chaque mois l'organisme où je fais mon stage reçoit la facture des appels téléphoniques sous format excel. Et pour faire le suivi j'ai à stocker les données dans ma BD mysql pour l'interroger après.

Comme j'avais dit auparavant, j'ai réussi la conversion du fichier de format excel vers le format csv, aussi j'ai réussi à me connecter à la base de données.

Mon problème maintenant réside en l'import de données je ne sais pas comment je vais y procéder vu que j'ai plus de 1200 lignes dans mon fichier csv, aussi je peux pas imaginer comment ces données séparées par des virgules vont etre stockées chaqune dans sa case appropriée .

Cordialement
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_laritta Messages postés 11 Date d'inscription mercredi 17 août 2011 Statut Membre Dernière intervention 27 décembre 2011 2
18 août 2011 à 13:49
Bonjour Goodconan,

Merci bien de m'avoir répondu.

Cette requête "LOAD" va faire l'affaire càd elle va importer toutes les données sauvegardées dans mon fichier ?

Cordialement
0
cs_laritta Messages postés 11 Date d'inscription mercredi 17 août 2011 Statut Membre Dernière intervention 27 décembre 2011 2
19 août 2011 à 15:03
Bonjour GoodConan,

Oui vous avez bien raison, la requete c'est load data local infile.
Bon, je l'avais tester plusieurs fois sur mysql et ça marche très bien, mais lorsque je l'essaye sous eclipse ça marche pas
SVP j'ai vraiment besoin de votre aide.
Voici les lignes de code que j'utilise:

String query = "LOAD DATA LOCAL INFILE 'C:\\Documents and Settings\\input.csv' INTO TABLE trial FIELDS TERMINATED BY ',' IGNORE 2 LINES";


ResultSet results;

try{

Statement stmt = con.createStatement();

results = stmt.executeQuery(query);

stmt.close();
}

catch(Exception e){
System.out.println("exception due à la requête");
}

}
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
19 août 2011 à 15:24
Il est possible que tu n'ais pas validé les insertions sous java à l'aide d'un COMMIT.

Ou alors si ca ne fonctionne pas, dis nous ce qui se passe : exception ou les données ne sont pas insérées ?
0
cs_laritta Messages postés 11 Date d'inscription mercredi 17 août 2011 Statut Membre Dernière intervention 27 décembre 2011 2
19 août 2011 à 16:13
Bonjour Julien,

Vu que je suis débutante, je ne sais pas ce que vous voulez dire par valider les insertions sous java à l'aide d'un COMMIT ni comment le faire, ça serait très gentil de votre part si vous me l'expliquer.


Pour le code que j'ai actuellement, il s'agit d'une exception et voici le message d'erreur:
exception due à la requête
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
19 août 2011 à 16:36
Bonjour,

Le COMMIT est une requête SQL qui sert à valider les modifications effectuées sur une base de données. Une fois que tes modifications sont faites, soumet la requête "COMMIT" et les modifications sont enregistrées.

Parfois les bases ont un autocommit qui permet de ne pas avoir à envoyer cette requête.

Je ne sais pas ce qu'il en est chez toi.
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
19 août 2011 à 16:39
pour connaitre l exception levée ...
remplace :
System.out.println("exception due à la requête");
par :
System.out.println("exception due à la requête : " + e );

Julien39 (salut) il ne me semble pas qu un commit soit nécessaire.
GodConan ;o)
0
cs_laritta Messages postés 11 Date d'inscription mercredi 17 août 2011 Statut Membre Dernière intervention 27 décembre 2011 2
19 août 2011 à 17:01
Bonjour,

J'ai rajouté le code suivant, mais le problème persiste et j'ai encore le même message d'erreur. Voici le code rajouté:

boolean autoCommitDefault = conn.getAutoCommit();
try {
conn.setAutoCommit(false);


conn.commit();
} catch (Throwable e) {
try { conn.rollback(); } catch (Throwable ignore) {}
throw e;
} finally {
try { conn.setAutoCommit(autoCommitDefault); } catch (Throwable ignore) {}
}
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
19 août 2011 à 17:13
bon!! reprend toi ;o) montre nous du code propre et une véritable exception ...
y a forcement un probleme quelque part ;o)


GodConan ;o)
0
cs_laritta Messages postés 11 Date d'inscription mercredi 17 août 2011 Statut Membre Dernière intervention 27 décembre 2011 2
19 août 2011 à 17:18
Bonjour GoodConan,

Voici le code :

import java.sql.*;



public class Connexion {

public static void main(String[] args) throws Throwable{

Class.forName("com.mysql.jdbc.Driver").newInstance();
String url = "jdbc:mysql://localhost:3306/db";
Connection con = DriverManager.getConnection(url, "root", "root");

if(con == null){

System.out.println("la connexion n'est pas établie");
}else{

System.out.println("Welcome to db");
}


String query = "LOAD DATA LOCAL INFILE 'C:\\Documents and Settings\\input.csv' INTO TABLE trial FIELDS TERMINATED BY ',' IGNORE 2 LINES";


ResultSet results;

try{

Statement stmt = con.createStatement();

results = stmt.executeQuery(query);

boolean autoCommitDefault = conn.getAutoCommit();
try {
conn.setAutoCommit(false);


conn.commit();
} catch (Throwable e) {
try { conn.rollback(); } catch (Throwable ignore) {}
throw e;
} finally {
try { conn.setAutoCommit(autoCommitDefault); } catch (Throwable ignore) {}
}



stmt.close();
}

catch(Exception e){
System.out.println("exception due à la requête");
}

}
}


Et voici ce que j'ai comme output
0
cs_laritta Messages postés 11 Date d'inscription mercredi 17 août 2011 Statut Membre Dernière intervention 27 décembre 2011 2
19 août 2011 à 17:22
Déesolée, je suis un petit peu perturbée :(
voici le output :

Welcome to db
exception due à la requête
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
19 août 2011 à 17:41
pfff ... fait tout de meme quelques effort ..; lis me messages et aplique au moins ce que l n te dit...
change ton sysout et donne nous l exeption levé...

catch(Exception e){
System.out.println("exception due à la requête" + e );
}

}

ca sert à rien si tu n affiche pas l exception..

GodConan ;o)
0
cs_laritta Messages postés 11 Date d'inscription mercredi 17 août 2011 Statut Membre Dernière intervention 27 décembre 2011 2
19 août 2011 à 20:21
Bonsoir GoodConan,

Excusez moi,je suis encore debutante c'est pour cela que je n'ai pas accorder de l'attention au message d'erreur.

Bon, j'ai fait ce que vous m'avez propose et voici le output :

exception due a la requete java.sql.SALException : Can not issue data manipulation statements with executeQuery().
0
Rejoignez-nous