Probléme StringTokenizer

HighPaula Messages postés 24 Statut Membre -  
HighPaula Messages postés 24 Statut Membre -
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 19031 Statut Modérateur 3 020
 
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 24 Statut Membre
 
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 19031 Statut Modérateur 3 020
 
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 24 Statut Membre
 
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 19031 Statut Modérateur 3 020
 
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 24 Statut Membre
 
Sa ne Marche Pas Encore ! Je ne c pa Pourquoi !
0