IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Base de données et SAX parser


Sujet :

Android

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Points : 14
    Points
    14
    Par défaut Base de données et SAX parser
    Bonjour

    Je rencontre un problème avec la mise à jour d'une base de données SQLite.

    après la création de la base, j'ajoute les données avec cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    	private void Readxml(SQLiteDatabase db, String dataname4, String string) {
    		try {
    			ContentValues _Values = new ContentValues();
    			SAXParserFactory saxparser = SAXParserFactory.newInstance();
    			SAXParser parser = saxparser.newSAXParser();
    			XMLReader xmlReader = parser.getXMLReader();
    			ParsingClass pc = new ParsingClass();
    			xmlReader.setContentHandler(pc);
    			InputStream is = new ByteArrayInputStream(
    					CacheManager.loadCacheByte(Accueil.DIR_DATA, string));
    			xmlReader.parse(new InputSource(is));
     
    			String nom, adresse, date, jour, latitude, longitude, tel, ville, zip;
    			int id;
    			Log.w(TAG, "Reading XML " + string);
    			for (int i = 0; i < pc.latitude.size() - 1; i++) {
    					id = Integer.parseInt(pc.id.get(i));
    					nom = pc.nom.get(i);
    					adresse = pc.adresse.get(i);
    					date = pc.date.get(i);
    					jour = pc.jour.get(i);
    					latitude = pc.latitude.get(i);
    					longitude = pc.longitude.get(i);
    					tel = pc.tel.get(i);
    					ville = pc.ville.get(i);
    					zip = pc.zip.get(i);
     
    					_Values.put(COLUMN_ID, id);
    					_Values.put(COLUMN_NOM, nom);
    					_Values.put(COLUMN_ADR, adresse);
    					_Values.put(COLUMN_DAT, date);
    					_Values.put(COLUMN_DAY, jour);
    					_Values.put(COLUMN_LON, longitude);
    					_Values.put(COLUMN_LAT, latitude);
    					_Values.put(COLUMN_TEL, tel);
    					_Values.put(COLUMN_VIL, ville);
    					_Values.put(COLUMN_ZIP, zip);
    					Log.e("test", "value : " + nom);
    					db.insert(dataname4, null, _Values);
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
     
    	}
    J'utilise SAXparser pour lire les fichers xml stockés en local ainsi que la classe ParssingClass que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    public class ParsingClass extends DefaultHandler {
     
    	public ArrayList<String> id = new ArrayList<String>();
    	public ArrayList<String> adresse = new ArrayList<String>();
    	public ArrayList<String> tel = new ArrayList<String>();
    	public ArrayList<String> ville = new ArrayList<String>();
    	public ArrayList<String> zip = new ArrayList<String>();
    	public ArrayList<String> nom = new ArrayList<String>();
    	public ArrayList<String> date = new ArrayList<String>();
    	public ArrayList<String> jour = new ArrayList<String>();
    	public ArrayList<String> latitude = new ArrayList<String>();
    	public ArrayList<String> longitude = new ArrayList<String>();
     
    	@Override
    	public void startElement(String uri, String localName, String qName,
    			Attributes attributes) throws SAXException {
    		super.startElement(uri, localName, qName, attributes);
    		if (localName.equalsIgnoreCase("nom")) {
    			tempStore = "";
    		} else if (localName.equalsIgnoreCase("adresse")) {
    			tempStore = "";
    		} else if (localName.equalsIgnoreCase("zip")) {
    			tempStore = "";
    		} else if (localName.equalsIgnoreCase("ville")) {
    			tempStore = "";
    		} else if (localName.equalsIgnoreCase("tel")) {
    			tempStore = "";
    		} else if (localName.equalsIgnoreCase("jour")) {
    			tempStore = "";
    		} else if (localName.equalsIgnoreCase("date")) {
    			tempStore = "";
    		} else if (localName.equalsIgnoreCase("latitude")) {
    			tempStore = "";
    		} else if (localName.equalsIgnoreCase("longitude")) {
    			tempStore = "";
    		} else if (localName.equalsIgnoreCase("id")) {
    			tempStore = "";
    		} else {
    			tempStore = "";
    		}
    	}
     
    	@Override
    	public void endElement(String uri, String localName, String qName)
    			throws SAXException {
    		super.endElement(uri, localName, qName);
    		if (localName.equalsIgnoreCase(Accueil.KEY_NOM)) {
    			nom.add(tempStore);
    		} else if (localName.equalsIgnoreCase(Accueil.KEY_ADR)) {
    			adresse.add(tempStore);
    		} else if (localName.equalsIgnoreCase(Accueil.KEY_ZIP)) {
    			zip.add(tempStore);
    		} else if (localName.equalsIgnoreCase(Accueil.KEY_VILLE)) {
    			ville.add(tempStore);
    		} else if (localName.equalsIgnoreCase(Accueil.KEY_TEL)) {
    			tel.add(tempStore);
    		} else if (localName.equalsIgnoreCase(Accueil.KEY_JOUR)) {
    			jour.add(tempStore);
    		} else if (localName.equalsIgnoreCase(Accueil.KEY_DATE)) {
    			date.add(tempStore);
    		} else if (localName.equalsIgnoreCase(Accueil.KEY_LAT)) {
    			latitude.add(tempStore);
    		} else if (localName.equalsIgnoreCase(Accueil.KEY_LON)) {
    			longitude.add(tempStore);
    		} else if (localName.equalsIgnoreCase(Accueil.KEY_ID)) {
    			id.add(tempStore);
    		}
    		tempStore = "";
    	}
     
    	private String tempStore = "";
     
    	@Override
    	public void characters(char[] ch, int start, int length)
    			throws SAXException {
    		super.characters(ch, start, length);
    		tempStore += new String(ch, start, length);
    	}
    }
    Lors du premier lancement de l'application, tout fonctionne correctement. En revanche, lorsque l'on doit mettre à jour la base de données (lorsque les xmls ont été modifiés). Le changement s'effectue mais celui-ci est extremement lent. Le temps de traitement passe de 10 secondes au premier lancement à plus de 5 minutes lors d'une mise à jour.

    J'ai effectué plusieurs test et il semble que le ralentissement vient de l'ajout des données dans la base.
    Avez-vous une idée de ce qui provoque ça ?

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    Finalement j'ai trouvé une solution alternative

    Je trouve le fichier de la bdd dans le téléphone et je le supprime puis j'en créer une nouvelle.
    C'est un peu crade comme méthode mais ça fonctionne.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SAX] Transformation du contenu d'une base de données MySQL en XML en utilisant SAX en Java
    Par mankou dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 05/01/2012, 15h35
  2. Parser et base de données
    Par liazidf dans le forum Bases de données
    Réponses: 4
    Dernier message: 19/02/2007, 14h38
  3. [Concept] Stabilité d'une base de donnée
    Par lassmust dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 03/07/2002, 16h16
  4. Bases de données
    Par dev dans le forum C++Builder
    Réponses: 4
    Dernier message: 01/07/2002, 22h55
  5. associer une base de données(access) a un dbgrid
    Par ange1708 dans le forum MFC
    Réponses: 3
    Dernier message: 11/06/2002, 12h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo