[ALG2] Exam juin 2011 - Accès BD Mozilla

Voir le sujet précédent Voir le sujet suivant Aller en bas

resolu [ALG2] Exam juin 2011 - Accès BD Mozilla

Message  Naedh le Mar 28 Aoû 2012, 17:18

Bonjour,

J'ai voulu refaire l'examen de l'année passée aujourd'hui en guise de préparation pour vendredi mais j'ai un problème pour accéder à la BD de mozilla.
Je copie le places.sqlite dans un /temp comme demandé mais lorsque j'essaye d'y accéder je reçois une erreur SQL me disant que le fichier est encrypté ou bien n'est pas une BD :

Instanciation de Places impossible:
SQLException: file is encrypted or is not a database

L'erreur se passe dans le getPlaces de PlaceDB donc j'en déduis que je me connecte bien à la BD mais que c'est lors du select qu'il y a un problème et qu'il n'arrive pas à accéder aux données. Il était indiqué dans le .pdf que firefox ouvre la BD en mode exclusif etc, mais vu que c'est une copie et que de toute façon firefox est fermé ça ne doit pas être ça qui pose problème, si ? Ou bien c'est tout à fait autre chose ?


Dernière édition par Naedh le Mer 29 Aoû 2012, 16:51, édité 1 fois

Naedh

Nombre de messages : 15
Age : 27
Prénom : philippe
Statut : fanatique du Cobol farci
Date d'inscription : 01/10/2008

http://www.manga-news.com

Revenir en haut Aller en bas

resolu Re: [ALG2] Exam juin 2011 - Accès BD Mozilla

Message  aro le Mer 29 Aoû 2012, 10:22

Naedh a écrit:Bonjour,

J'ai voulu refaire l'examen de l'année passée aujourd'hui en guise de préparation pour vendredi mais j'ai un problème pour accéder à la BD de mozilla.
Je copie le places.sqlite dans un /temp comme demandé mais lorsque j'essaye d'y accéder je reçois une erreur SQL me disant que le fichier est encrypté ou bien n'est pas une BD :

Instanciation de Places impossible:
SQLException: file is encrypted or is not a database

L'erreur se passe dans le getPlaces de PlaceDB donc j'en déduis que je me connecte bien à la BD mais que c'est lors du select qu'il y a un problème et qu'il n'arrive pas à accéder aux données. Il était indiqué dans le .pdf que firefox ouvre la BD en mode exclusif etc, mais vu que c'est une copie et que de toute façon firefox est fermé ça ne doit pas être ça qui pose problème, si ? Ou bien c'est tout à fait autre chose ?
Difficile de te répondre sans voir ton code : comment tu as implémenté getPlace(), est-ce que les valeurs de ton fichier .xml sont correctes,...
En tout cas, j'ai ressorti ma solution de l'année passée et l'ai fait tourner avec Firefox ouvert sans aucun problème.

aro

Nombre de messages : 557
Prénom : Anne
Statut : Prof
Date d'inscription : 06/09/2008

Revenir en haut Aller en bas

resolu Re: [ALG2] Exam juin 2011 - Accès BD Mozilla

Message  Naedh le Mer 29 Aoû 2012, 11:17

Voila les différentes parties concernées :

getPlaces :

Code:

public static Collection<PlaceDto> getPlaces(PlaceSel sel) throws HistoryDbException {
        ArrayList<PlaceDto> al = new ArrayList<PlaceDto>();
        try {
            String query = "Select id, url, title, rev_host, visit_count, hidden, type, favicon_id, frecency, last_visit_date FROM moz_places ";
            java.sql.Connection connexion = DBManager.getConnection();
            java.sql.PreparedStatement stmt;
            String where = "";
            if (sel.getId() != 0) {
                where = where + " id = ? ";
            }
            if (sel.getPartUrl() != null && !sel.getPartUrl().equals("")) {
                if (!where.equals("")) {
                    where = where + " AND ";
                }
                where = where + " url like ? ";
            }
           
            if (sel.getPartTitle() != null && !sel.getPartTitle().equals("")) {
                if (!where.equals("")) {
                    where = where + " AND ";
                }
                where = where + " title like ? ";
            }
           
            if (sel.getVisitCount() != 0) {
                if (!where.equals("")) {
                    where = where + " AND ";
                }
                where = where + " visit_count >= ? ";
            }

            if (where.length() != 0) {
                where = " where " + where;
                query = query + where;
            }
            query = query + getOrderBy(sel);
            query = query + getLimit(sel);
            stmt = connexion.prepareStatement(query);

            int i = 1;
            if (sel.getId() != 0) {
                stmt.setInt(i, sel.getId());
                i++;
            }

            if (sel.getPartUrl() != null && !sel.getPartUrl().equals("")) {
                stmt.setString(i, sel.getPartUrl() + "%");
                i++;
            }
            if (sel.getPartTitle() != null && !sel.getPartTitle().equals("")) {
                stmt.setString(i, sel.getPartTitle() + "%");
                i++;
            }
            if (sel.getVisitCount() != 0) {
                stmt.setInt(i, sel.getVisitCount());
                i++;
            }
           
            java.sql.ResultSet rs = stmt.executeQuery();
            while (rs.next()) {
                al.add(new PlaceDto(rs.getInt("id"), rs.getString("url"), rs.getString("title"),rs.getString("rev_host"),rs.getInt("visit_count"),rs.getInt("hidden"),rs.getInt("type"),rs.getInt("favicon_id"),rs.getInt("frecency"),rs.getLong("last_visit_date")));
            }
        } catch (java.sql.SQLException eSQL) {
            throw new HistoryDbException("Instanciation de Places impossible:\rSQLException: " + eSQL.getMessage());
        }

        return al;
    }

le xml :
Code:

<properties>
<entry key="url">jdbc:sqlite:</entry>
<entry key="driver">org.sqlite.JDBC</entry>
<entry key="mozPath">C:/Users/Phil/AppData/Roaming/Mozilla/Firefox/Profiles/xoxs2vgm.default/</entry>
<entry key="tmpPath">tmp/</entry>
<entry key="fileName">places.sqlite</entry>
</properties>

le setConnection :
Code:

private static void setConnection() throws HistoryDbException {
       
        Properties propriete = new Properties();
        try {
            propriete.loadFromXML(propriete.getClass().getResourceAsStream("/be/esi/alg2/history/xml/sqlite.xml"));
        } catch (IOException ex) {
            throw new HistoryDbException("Problème fichier xml .\n "+ex.getMessage());
        }
       
        try {
            Class classe = Class.forName(propriete.getProperty("driver"));
        } catch (ClassNotFoundException ex) {
            throw new HistoryDbException("Problème driver .\n "+ex.getMessage());
        }
        try {
            FileUtils.copy(propriete.getProperty("mozPath")+propriete.getProperty("fileName"), propriete.getProperty("tmpPath")+propriete.getProperty("fileName"));
        } catch (IOException ex) {
            throw new HistoryDbException("Problème copie BD \n "+ex.getMessage());
        }
        try {
            connection = DriverManager.getConnection(propriete.getProperty("url")+propriete.getProperty("tmpPath")+propriete.getProperty("fileName"), "", "");
            connection.setAutoCommit(true);
        } catch (SQLException ex) {
            throw new HistoryDbException("Problème de connexion.\n "+ex.getMessage());
        }
    }

Naedh

Nombre de messages : 15
Age : 27
Prénom : philippe
Statut : fanatique du Cobol farci
Date d'inscription : 01/10/2008

http://www.manga-news.com

Revenir en haut Aller en bas

resolu Re: [ALG2] Exam juin 2011 - Accès BD Mozilla

Message  aro le Mer 29 Aoû 2012, 15:37

Semble ok.
Peut-être que la version du .jar sqlitejdbc que tu utilises ne convient pas.
Essaye avec celui-ci.

aro

Nombre de messages : 557
Prénom : Anne
Statut : Prof
Date d'inscription : 06/09/2008

Revenir en haut Aller en bas

resolu Re: [ALG2] Exam juin 2011 - Accès BD Mozilla

Message  Naedh le Mer 29 Aoû 2012, 16:51

Le problème venait en effet bien de là !
Merci pour le coup de main Smile

Naedh

Nombre de messages : 15
Age : 27
Prénom : philippe
Statut : fanatique du Cobol farci
Date d'inscription : 01/10/2008

http://www.manga-news.com

Revenir en haut Aller en bas

resolu Re: [ALG2] Exam juin 2011 - Accès BD Mozilla

Message  Contenu sponsorisé Aujourd'hui à 10:58


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum