Académique Documents
Professionnel Documents
Culture Documents
Chap. 5
MODE_PRIVATE et MODE_WORLD_READABLE/WRITABLE
NB: les fichiers sont à éviter. Mieux vaut alléger l'application au maximum et
prévoir le téléchargement de ressources nécessaires et l'utilisation de
fournisseurs de contenu.
Stockage Externe
Architecture avec une Base de Données Externe
D’un coté application Android, d'un autre, notre base de données
Objectif: faire communiquer ces deux entités, est d'utiliser un Middleware qui va
organiser, adapter et traiter les échanges entre l'application et la BDD.
Ces échanges sont possibles grâce à des Web Services, avec des langages d'échanges
adaptés tels que JSON, ou XML.
Stockage Externe
La communication
Stockage Externe
Technologie permettant de gérer les échanges
Type Définition
NULL Valeur vide
INTEGER Entier signé
REAL Nombre réel
TEXT Champ texte
BLOB Champ binaire
• SQLiteOpenHelper : il s'agit d'une classe qui aide à créer et à gérer les versions
de la base de données. Voici les méthodes qui facilitent ces opérations :
- onCreate() : crée la structure de la base (tables, données par défaut) si elle
n'existe pas.
- onUpgrade() : actualise la structure de la base si c'est nécessaire.
- onOpen() : ouvre la base si c'est possible.
BDD SQLite
• SQLiteDatabase : les instances de cette classe sont utilisées pour gérer les
données de la base. Elles gérent les transactions, ajouts, suppressions,
actualisations ainsi que la lecture des données.
• ContentValues : la classe qui stocke les données qui peuvent être traitées
par unContentResolver.
BDD SQLite
class MaBaseOpenHelper extends SQLiteOpenHelper {
public MaBaseOpenHelper(Context context, String nom, CursorFactory cursorfactory, int
version)
{
super(context, nom, cursorfactory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Ajoutez votre code de création ici ...
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Ajoutez votre code de mise à jour ici ...
}
}
BDD SQLite
public class DictionaryOpenHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 2;
private static final String DICTIONARY_TABLE_NAME = "dictionary";
private static final String DICTIONARY_TABLE_CREATE =
"CREATE TABLE " + DICTIONARY_TABLE_NAME + " (" +KEY_WORD + " TEXT, " +
KEY_DEFINITION + " TEXT);";
DictionaryOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DICTIONARY_TABLE_CREATE);
}
}
Pour faciliter la lecture de votre code il est recommandé d’utiliser des constantes pour définir les
objets liés à vos entités dans la base de données.
BDD SQLite
Lecture / Ecriture dans la BDD
Pour réaliser des écritures ou lectures, on utilise les méthodes getWritableDatabase() et
getReadableDatabase() qui renvoient une instance de SQLiteDatabase. Sur cet objet,
une requête peut être exécutée via la méthode query():
public Cursor query (boolean distinct, String table, String[] columns,
String selection, String[] selectionArgs,
String groupBy, String having, String orderBy,
String limit)
Toutes les requêtes de sélection SQLite s’effectuent via la méthode query() d’une
instance de SQLiteDatabase.
BDD SQLite
Curseurs et Content Values
Les Content Values servent à insérer de nouvelles lignes dans des tables.
Chaque objet ContentValues représente une ligne de la table sous la
forme d’une association des noms de colonnes vers les valeurs.
Sous Android, le résultat des requêtes est renvoyé sous la forme d’objets
Cursor. La classe Cursor inclut de nombreuses fonctions de déplacement:
BDD SQLite
L'objet de type Cursor permet de traiter la réponse (en lecture ou écriture)
Insérer ou mettre à jour des données dans une base SQLite repose sur
l’utilisation de la méthode insert de la classe SQLiteDatabase. Pour
spécifier les valeurs de la ligne à insérer, la méthode accepte un objet de
type ContentValues. Cet objet stocke les valeurs de chaque colonne de la
ligne à insérer sous la forme d’une collection d’associations entre le nom
de la colonne et la valeur.
BDD SQLite
public long insertPlanete(Planete planete) {
ContentValues valeurs = new ContentValues();
valeurs.put(COLONNE_NOM, planete.getNom());
valeurs.put(COLONNE_RAYON, planete.getRayon());
return maBaseDonnees.insert(TABLE_PLANETES, null, valeurs);
}
Android fournit plusieurs parsers XML (Pull parser, Document parser, Push
parser). SAX et DOM sont disponibles. L'API de streaming (StAX) n'est pas
disponible. Cependant, une librairie équivalente est disponible:
XmlPullParser.
XML
String s = new String("<plop><blup attr=\"45\">XML Test</blup></plop>");
InputStream f = new ByteArrayInputStream(s.getBytes());
XmlPullParser parser = Xml.newPullParser();
try {
// auto-detect the encoding from the stream
parser.setInput(f, null);
parser.next();
Toast.makeText(this, parser.getName(), Toast.LENGTH_LONG).show();
parser.next();
Toast.makeText(this, parser.getName(), Toast.LENGTH_LONG).show();
Toast.makeText(this, parser.getAttributeValue(null, "attr"),
Toast.LENGTH_LONG).show();
parser.nextText();
Toast.makeText(this, parser.getText(),
Toast.LENGTH_LONG).show();
}
Conclusion
Lien documentation:
http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html
FIN