Probléme StringTokenizer

Fermé
HighPaula Messages postés 22 Date d'inscription dimanche 18 mars 2012 Statut Membre Dernière intervention 9 juin 2015 - 18 mars 2012 à 12:37
HighPaula Messages postés 22 Date d'inscription dimanche 18 mars 2012 Statut Membre Dernière intervention 9 juin 2015 - 19 mars 2012 à 21:49
Bonjour,
Je prepare un projet de fin d'etude ou il faut que je remplit une base de donné mySql a partir d'un fichier Texte . J'ai Crée la base de donnée et j'ai etabli la connection entre Java et MySql Avec MySql_Connector ! Il me reste maintenant que Remplir La Base !
J'ai essayé ce code My il donne un erreur :

FileReader fr ;
BufferedReader br;
StringTokenizer Line ;
StringTokenizer Mot ;
String idu;
String idq;
Date dateq;
String url;
String ItemRank;



public Fichier(String NomFichier) {
Sql base = new Sql("com.mysql.jdbc.Driver","jdbc:mysql://localhost/pfe-base");
base.connect("root","");
try {
this.fr = new FileReader(NomFichier);
} catch (FileNotFoundException e) {

e.printStackTrace();

}
br = new BufferedReader(fr);
}
public static java.util.Date stringToDate(String sDate) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");
return sdf.parse(sDate);
}
public void extraction() throws Exception{

Line = new StringTokenizer(br.toString(),"\n");
Mot = new StringTokenizer(Line.toString(),"\t");
while(Line.hasMoreTokens()){
while(Mot.hasMoreTokens()) {
idu = Mot.nextToken().toString();
idq = Mot.nextToken().toString();
// C'est Ici Que Eclipse m'annonce l'erreur !
dateq = stringToDate(Mot.nextToken().toString());
ItemRank = Mot.nextToken().toString();
url = Mot.nextToken().toString();}
//base.update("INSERT INTO URL VALUES(idu,idq,url,dateq,ItemRank);");

}
Line.nextToken();
}

Repondez Moi Svp !! Je suis Bloquééééé ! Merci

1 réponse

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
18 mars 2012 à 13:01
Ta méthode stringToDate lève Exception (en fait ce serait plutôt ParseException), il faut que tu traites cette exception avant qu'elle ne provoque l'arrêt du programme.

private final static SimpleDateFormat SDF = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");

public static Date stringToDate(String sDate)
{
    try
    {
        return SDF.parse(sDate);
    }
    catch (ParseException e)
    {
        e.printStackTrace();
        return null;
    }
}

Remarques :
Par convention les noms de variables doivent commencer par une minuscule
Depuis Java 5, tu disposes de la classe Scanner, qui te simplifie la vie, pour ne pas avoir à utiliser la combinaison BufferedReader/StringTokenizer qui est lourde !

public void extraction() throws FileNotFoundException 
{
    Scanner fic = new Scanner(new File(nomFichier));
    while (fic.hasNextLine())
    {
        String idu, idq, itemRank, url;
        Date dateq;
        
        Scanner sc = new Scanner(fic.nextLine()).useDelimiter("\t");
        while (sc.hasNext())
        {
            //if (sc.hasNext())
                idu = sc.next();
            //else break;
    
            if (sc.hasNext())
                idq = sc.next();
            else break;
            
            if (sc.hasNext())
                dateq = stringToDate(sc.next());
            else break;
    
            if (sc.hasNext())
                itemRank = sc.next();
            else break;
            
            if (sc.hasNext())
                url = sc.next();
            else break;
            
            //base.update("INSERT INTO URL VALUES(idu,idq,url,dateq,ItemRank);");
        }
        sc.close();
    }
    fic.close();
}
0
HighPaula Messages postés 22 Date d'inscription dimanche 18 mars 2012 Statut Membre Dernière intervention 9 juin 2015
18 mars 2012 à 14:37
J'ai essayé Votre Suggestion Mais Sa ne Rempli Pas La Base De Donnée MySql Meme si il y as pas d'erreur ! Aidez Moi Svp
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
18 mars 2012 à 15:29
Ton problème initial ne portait pas sur le remplissage de la base de données, tu avais mis la ligne en commentaire, et je l'ai laissé tel quel... Est-ce que l'exception sur la lecture du fichier est corrigée ?

Pour le problème d'ajout à la base de donnée, donne moi le code de la classe Sql, ou l'import que tu as fait pour pouvoir l'utiliser.
0
HighPaula Messages postés 22 Date d'inscription dimanche 18 mars 2012 Statut Membre Dernière intervention 9 juin 2015
18 mars 2012 à 16:22
Le Voila Le Code de la Classe SQL !!
import java.sql.*;

import javax.swing.JOptionPane;


public class Sql {

Connection conn;
Statement stmt;
PreparedStatement pStmt;
ResultSet rs;
String driver ;
String url ;
public Sql(String driver,String url){
this.driver = driver;
this.url = url ;
}
public void connect(String log, String pass)
{
try
{

Class.forName(driver);
conn = DriverManager.getConnection(url,log,pass);
stmt = conn.createStatement();
System.out.println("La Connection a reussi");
}
catch ( SQLException E)
{
JOptionPane.showMessageDialog(null,"Erreur de connexion à la base","Connexion",JOptionPane.WARNING_MESSAGE);
System.out.println("1");
}
catch ( ClassNotFoundException E)
{
E.printStackTrace();
}
}

// Méthode qui renvoit un ResultSet pour une requête
// @args -> la requete
public ResultSet getQuery(String query)
{
try
{
rs = stmt.executeQuery(query);
}
catch (SQLException E)
{
JOptionPane.showMessageDialog(null,"Erreur de connexion à la base. Veuillez contacter votre administrateur système","Connexion",JOptionPane.WARNING_MESSAGE);
System.out.println("2");
System.out.println("SQLException: " + E.getMessage());
System.out.println("SQLState: " + E.getSQLState());
System.out.println("VendorError: " + E.getErrorCode());
}
return rs;
}
public void update(String query) throws SQLException
{


stmt.executeUpdate(query);

}

// Méthode qui renvoit le nombre d'enregistrements affectés
// par un objet PreparedStatement
// @args -> le PreparedStatement
public int update(PreparedStatement p)
{
int r = 0;
try
{
pStmt = p;
r = pStmt.executeUpdate();
}
catch (SQLException E)
{
JOptionPane.showMessageDialog(null,"Erreur de connexion à la base","Connexion",JOptionPane.WARNING_MESSAGE);
System.out.println("6");
}
return r;
}
public void disconnect()
{
try
{
rs.close();
stmt.close();
conn.close();
}
catch ( SQLException E)
{
JOptionPane.showMessageDialog(null,"Erreur de connexion à la base","Connexion",JOptionPane.WARNING_MESSAGE);
System.out.println("14");
}
}

}
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
18 mars 2012 à 16:35
Je reprends ton premier code, mais j'ignore s'il est toujours d'actualité :
base.update("INSERT INTO URL VALUES(idu,idq,url,dateq,ItemRank);");

Je pense que pour prendre en compte les valeurs des champs, il faudrait plutôt écrire ceci :
base.update("INSERT INTO URL VALUES("+idu+","+idq+","+url+","+ dateq.toString+","+ItemRank+");");

Il serait également intéressant de récupérer la valeur de retour de la commande et de filtrer l'exception :

public int update(String query)
{
    try
    {
        return stmt.executeUpdate(query);
    }
    catch (SQLException e)
    {
        e.printStackTrace();
        return -1;
    }
}

int n = base.update(...);
System.out.println(n);
0
HighPaula Messages postés 22 Date d'inscription dimanche 18 mars 2012 Statut Membre Dernière intervention 9 juin 2015
18 mars 2012 à 16:53
Sa ne Marche Pas Encore ! Je ne c pa Pourquoi !
0