Excellent tuto : http://www.techotopia.com/index.php/An_Android_SQLite_Database_Tutorial
http://hmkcode.com/android-simple-sqlite-database-tutorial/
http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/
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) !
Votre commentaire