Remplir une table mysql de manière itérative

Fermé
supcomingenieur - 19 mars 2013 à 11:04
 supcomingenieur - 19 mars 2013 à 13:53
Bonjour,

je veux remplir une table d'une base de données avec des données bien déterminées. l'idée et de lire chaque ligne d'une fichier, faire des traitement sur cette ligne et renvoyer le resultat dans la table et ainsi de suite jusqu'à parcourir tout le fichier et remplir toute la table. voila le code que j'utilise

while(((ligne=br.readLine())!=null) || (resultat.next())){

String [] str = ligne.split(separateur);
chaine = str[1];
instruction.executeUpdate ("INSERT INTO "+this.SQLTable+ "("+this.colonne+") VALUES ('"+chaine+"')");
}

j'arrive à boucler sur le fichier avec "ligne=br.readline()" mais puisque la table est vide l'utilisation de "resultat.next()" est incorrecte. comment boucler sur la table sans utiliser cette instruction????

merci bcp
A voir également:

6 réponses

hellomoto1 Messages postés 440 Date d'inscription mardi 12 août 2008 Statut Membre Dernière intervention 25 mars 2013 85
19 mars 2013 à 11:36
Bonjour,

pourquoi la condition resultat.next()),ton traitement dependera de la longueur de ton fichier donc je vois pas l'utilité de cette condition,cette derniere s'utilise quand on recuepere des enregistrement de la base via une requete select pour tester s'il ya toujours une ligne suivante a traiter ...

GoodLuck
0
supcomingenieur
19 mars 2013 à 11:46
oui c'est vrai, j'ai enlevé cette instruction mais mon code ne focntionne pas rien n'est ajouté dans la table, voici le code de toute la classe, je ne vois pas ou est le problème

public class DBUpdate {

// Attributs de la classe
static File fichier;
static String separateur;
static String SQLTable;
static String colonne;
String chaine ;

public DBUpdate(File fichier, String separateur, String SQLTable, String colonne) {

// initiasation des attributs
this.fichier=fichier;
this.separateur=separateur;
this.SQLTable=SQLTable;
this.colonne=colonne;

String url = "jdbc:mysql://localhost:3306/base";
String username = "root";
String password = "2424";


try{
// connexion à la base
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection connexion = DriverManager.getConnection(url, username, password);
Statement instruction = connexion.createStatement();
ResultSet resultat = instruction.executeQuery ("SELECT * FROM "+ this.SQLTable);

try {
InputStream ips=new FileInputStream(fichier);
InputStreamReader ipsr=new InputStreamReader(ips);
BufferedReader br=new BufferedReader(ipsr);
String ligne;

while((ligne=br.readLine())!=null){

String [] str = ligne.split(separateur);
chaine = str[1];
instruction.executeUpdate ("INSERT INTO "+this.SQLTable+ "("+this.colonne+") VALUES ('"+chaine+"')");
}

br.close();
connexion.close();

}catch(FileNotFoundException ei){}

} catch (Exception e) {System.out.println("echec pilote :" +e); }
}



public static void main(String[] args) {
DBUpdate r=new DBUpdate(new File("/root/Desktop/peerIP.txt"),"=","BGP_Peers","Peer_Name");


}
}
0
hellomoto1 Messages postés 440 Date d'inscription mardi 12 août 2008 Statut Membre Dernière intervention 25 mars 2013 85
19 mars 2013 à 12:11
tes requetes me semble incorrectes,tu dois verifier la syntaxe de tes requetes ,par exemple pour "SELECT * FROM "+ this.SQLTable ,doit etre comme ceci
"select * from \"" + this.sql +"\"";
d'ailleur je vois pas l'utilité de cette requete.

goodluck
0
supcomingenieur
19 mars 2013 à 12:18
non aucun problemes avec les requêtes j'ai une autre classe qui utilise la meme syntaxe sans probleme et l'utilité de la requête c'est remplir la base!!!
0

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

Posez votre question
hellomoto1 Messages postés 440 Date d'inscription mardi 12 août 2008 Statut Membre Dernière intervention 25 mars 2013 85
19 mars 2013 à 12:30
je parle de cette requette ""SELECT * FROM "+ this.SQLTable"

elle te servira a quoi dans ton code?
0
supcomingenieur
19 mars 2013 à 13:53
j'ai oublié de l'enlevée mais elle servira lorsque la table sera pleine. mais bon je l'ai enlevé et ca ne marche pas, je crois que le problème viens de la clause try qui permet la lecture du fichier, je crois que ca bloque le processus d'ecriture dans la base car je l'ai enlevé et la requête SQL marche.

ce que je veux faire moi c'est ouvrire une connexion vers la base, lire la 1ere ligne du fichier, la mettre dans la table, et refaire ce traitement jusqu'à ce que toutes les lignes du fichiers soient parcourues puis fermer la connexion. voila si tu peu m'aider n'hesite pas.
0