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

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Articles récents
Commentaires récents
fatima sur Bienvenue !
AdminDroid sur Bienvenue !
fatima sur Bienvenue !
Archives
Catégories
%d blogueurs aiment cette page :