Base de données et fichiers

Excellent tuto : http://www.techotopia.com/index.php/An_Android_SQLite_Database_Tutorial

http://stackoverflow.com/questions/3013021/embed-a-database-in-the-apk-of-a-distributed-application-android

http://hmkcode.com/android-simple-sqlite-database-tutorial/

http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

http://stackoverflow.com/questions/9109438/how-to-use-an-existing-database-with-an-android-application/9109728#9109728

1°) Création d’une classe « PlaceDataSql » pour manipuler la base de données (et ses tables) :

 package com.andrologiciels.andromus;  
 import android.content.ContentValues;  
 import android.content.Context;  
 import android.database.Cursor;  
 import android.database.sqlite.SQLiteDatabase;  
 import android.database.sqlite.SQLiteException;  
 import android.database.sqlite.SQLiteOpenHelper;  
 import android.util.Log;  
 public class PlaceDataSQL extends SQLiteOpenHelper {  
      private static final String DATABASE_NAME = "dbmusique.db";  
      private static final int DATABASE_VERSION = 1;  
      //-- Déclaration de la base de données "dbmusique"  
      public PlaceDataSQL(Context context) {  
           super(context, DATABASE_NAME, null, DATABASE_VERSION);  
      }  
      @Override  
      //-- Création d'une table "musiques" dans la base de données "dbmusique"  
      public void onCreate(SQLiteDatabase db) {  
           db.execSQL("CREATE TABLE musiques (id varchar(20), " +  
                       "image BLOB,titre TEXT,"+  
              "categorie TEXT,prix integer, ville TEXT, dept TEXT, date TEXT, heure TEXT, anouv integer, asauv integer)");  
      }  
      public static void onDelete(SQLiteDatabase db) {  
           db.execSQL("DELETE FROM musiques");  
      }  
      public static boolean onRecherche(SQLiteDatabase db, String idAnn) {  
     Cursor c = db.query("musiques", null,   
         "id = '" + idAnn+"'", null, null, null, null);  
           //si aucun élément n'a été retourné dans la requête, on renvoie faux  
           if (c.getCount() == 0)  
             {c.close();  
                 return false;}  
     else  
       {c.close();  
       return true;}      
      }  
      public static int onRechercheSauv(SQLiteDatabase db, String idAnn) {  
     Cursor c = db.query("musiques", null,   
         "id = '" + idAnn+"'", null, null, null, null);  
           //si aucun élément n'a été retourné dans la requête, on renvoie faux  
           if (c.getCount() == 0)  
             {c.close();  
                 return c.getInt(10);}  
     else  
       {c.close();  
       return 0;}      
      }  
      public static int updateMusiques(SQLiteDatabase db, String id, musique Mus){  
           ContentValues values = new ContentValues();  
           values.put("id", Mus.getId());  
           ////////////  
           return db.update("musiques", values, "id = " +id, null);  
      }  
      public long insertAnnonce(SQLiteDatabase db, musique Mus){  
           //Création d'un ContentValues (fonctionne comme une HashMap)  
           ContentValues values = new ContentValues();  
           //on lui ajoute une valeur associé à une clé (qui est le nom de la colonne dans laquelle on veut mettre la valeur)  
           values.put("id", Mus.getId());  
           ////////////////////  
           //on insère l'objet dans la BDD via le ContentValues  
           return db.insert("musiques", null, values);  
      }  
      public long deleteAnnonce(SQLiteDatabase db, String id){  
           //on delete la ligne concernée  
           return db.delete("musiques", "id = " +id, null);  
      }  
      public boolean checkDataBase(String db) {  
           SQLiteDatabase checkDB = null;  
           try {  
                String myPath = "data/data/com.andrologiciels/databases/" + db;  
                checkDB = SQLiteDatabase.openDatabase(myPath, null,  
                          SQLiteDatabase.OPEN_READONLY);  
           } catch (SQLiteException e) {  
                // database does't exist yet.  
           } catch (Exception e) {  
           }  
           if (checkDB != null) {  
                checkDB.close();  
           }  
           return checkDB != null ? true : false;  
      }  
      @Override  
      public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
           if (oldVersion >= newVersion)  
                return;  
           if (oldVersion == 1) {  
                Log.d("New Version", "Datas can be upgraded");  
           }  
           Log.d("Sample Data", "onUpgrade     : " + newVersion);  
      }  
 }  

2°) Dans le code de l’activité :

* Déclaration d’une variable « table » : SQLiteDatabase dbOldMus;

  • Déclaration d’une variable « base de données » : PlaceDataSQL placeData;

* Ouverture de la base de données et d’une table en lecture/écriture :

     // Initialisation des bases de données  
     placeData = new PlaceDataSQL(this);          
     dbOldMus = placeData.getWritableDatabase();  

* Parcours de la table :

          cursor = getEvents("musiques");  
               //-- Chargement de la base de données dbOldMus dans tableau tOldMus  
               cursor.moveToFirst();  
       //-- Copie de tous les enregistrements dans le tableau tOldMus        
               while (cursor.moveToNext()) {  
                   lMusique = new musique(cursor.getString(0),cursor.getString(1),cursor.getString(2),cursor.getString(3),  
                                    cursor.getString(4),cursor.getString(5),cursor.getString(6),cursor.getInt(7),  
                                    cursor.getInt(8));  
            tOldMus.add(lMusique);  
               }  

Avec :

  //-- Le cursor contient ici tous les champs et toutes les lignes de la "table"
           SQLiteDatabase db = (placeData).getReadableDatabase();  
           Cursor cursor = db.query(table, null, null, null, null, null, null);  
           startManagingCursor(cursor);  
           return cursor;                 
      }  

Pour un select distinct :

      private Cursor getArtistes(String table) {  
           //-- Select distinct "artistes" !  
           SQLiteDatabase db = (placeData).getReadableDatabase();  
           Cursor cursor = db.query(true, table, new String[] { "artist" },  
                null, null, "artist", null, null, null);  
           return cursor;}  

Pour un select avec clause where et résultat trié :

      private Cursor getMusiqueArtistes(String table, String SelArtiste) {  
           //-- Select * from musiques where artist=SelArtiste !  
           SQLiteDatabase db = (placeData).getReadableDatabase();  
           Cursor cursor = db.query(table, null, "artist = '"+SelArtiste+"'", null, null, null, "titre ASC");  
           return cursor;}  

Pour trier en fonction des paramètres locaux du téléphone :  » COLLATE LOCALIZED ASC »

Suppression d’un fichier :

 package com.example.adeletefiletest;  
 import java.io.File;  
 import android.net.Uri;  
 import android.os.Bundle;  
 import android.os.Environment;  
 import android.widget.Toast;  
 import android.app.Activity;  
 import android.content.Intent;  
 public class MainActivity extends Activity {  
      File file=null;  
      String sFile="";  
      @Override  
      protected void onCreate(Bundle savedInstanceState) {  
           super.onCreate(savedInstanceState);  
     String sFile="test.mp3";  
     sFile = Environment.getExternalStorageDirectory()+"/DCIM/"+sFile;  
     // getExternalStrorageDirectory() = Internal memory =sdcard0  
     // For sdcard1 = /storage/sdcard1/DCIM/test.txt  
           file = new File(sFile);  
              boolean deleted = false;  
     if (file!=null && file.exists())  
       deleted=file.delete();     
     if (deleted)  
      {  
       Toast.makeText(this,"Suppression de --->"+sFile,Toast.LENGTH_LONG).show();  
                //--Refresh media list  
       sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://")));  
      }  
     else  
     {  
       Toast.makeText(this,"Impossible de supprimer --->"+sFile,Toast.LENGTH_LONG).show();  
      }       
      }  
 }  

Avec dans le fichier manifest de l’application, les permissions et l’intent filter MEDIA :

  <?xml version="1.0" encoding="utf-8"?>  
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
   package="com.example.adeletefiletest"  
   android:versionCode="1"  
   android:versionName="1.0" >  
   <uses-sdk  
     android:minSdkVersion="8"  
     android:targetSdkVersion="16" />    
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />   
   <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />   
   <application  
     android:allowBackup="true"  
     android:icon="@drawable/ic_launcher"  
     android:label="@string/app_name"  
     android:theme="@style/AppTheme" >  
     <activity  
       android:name="com.example.adeletefiletest.MainActivity"  
       android:label="@string/app_name" >  
       <intent-filter>  
         <action android:name="android.intent.action.MAIN" />  
         <category android:name="android.intent.category.LAUNCHER" />  
       </intent-filter>  
       <intent-filter>  
          <action android:name="android.intent.action.MEDIA_MOUNTED" />  
          <data android:scheme="file" />   
       </intent-filter>  
     </activity>  
   </application>  
 </manifest>  

Ne pas oublier de tester avec le terminal android déconnecté du PC… (Sinon la carte mémoire n’est pas libérée) !

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

Articles récents
Commentaires récents
fatima dans Bienvenue !
AdminDroid dans Bienvenue !
fatima dans Bienvenue !
Archives
Catégories