Tutoriel SQLite avec exemple dans Android Studio | Tutoriel sur les bases de données Android dans Android Studio : Stockez vos données

Tutoriel SQLite avec exemple dans Android Studio

SQLite est une base de données à base de requêtes structurelles, open source, légère, sans accès réseau et autonome. Il prend en charge les fonctionnalités de base de données relationnelles intégrées.

Opérations de la base de données SQLite

Opérations de la base de données SQLite

Quand une application a besoin de stocker une grande quantité de données, alors l’utilisation de sqlite est plus préférable que d’autres systèmes de dépôt comme SharedPreferences ou l’enregistrement des données dans des fichiers.

Android a intégré l’implémentation de la base de données SQLite. Elle est disponible localement sur l’appareil(mobile & tablette) et contient des données au format texte. Il transporte des données légères et convient à de nombreux langages. Ainsi, elle ne nécessite aucune administration ou procédure de configuration de la base de données.

Note importante – La base de données créée est enregistrée dans un répertoire : data/data/APP_Name/databases/DATABASE_NAME.

Création et mise à jour de la base de données dans Android

Pour créer, mettre à jour et d’autres opérations, vous devez créer une sous-classe ou la classe SQLiteOpenHelper. SQLiteOpenHelper est une classe d’aide pour gérer la création de base de données et la gestion des versions. Elle fournit deux méthodes onCreate(SQLiteDatabase db), onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion).

Le SQLiteOpenHelper est responsable de l’ouverture de la base de données si elle existe, de la création de la base de données si elle n’existe pas et de la mise à jour si nécessaire. Le SQLiteOpenHelper ne nécessite que le DATABASE_NAME pour créer la base de données. Après avoir étendu SQLiteOpenHelper, vous devrez implémenter ses méthodes onCreate, onUpgrade et son constructeur.

La méthode onCreate(SQLiteDatabase sqLiteDatabase) est appelée une seule fois tout au long du cycle de vie de l’application. Elle sera appelée chaque fois qu’il y aura un premier appel à la fonction getReadableDatabase() ou getWritableDatabase() disponible dans la super classe SQLiteOpenHelper. Ainsi, la classe SQLiteOpenHelper appelle la méthode onCreate() après avoir créé la base de données et instancié l’objet SQLiteDatabase. Le nom de la base de données est passé dans l’appel du constructeur.

onUpgrade(SQLiteDatabase db,int oldVersion, int newVersion) n’est appelé que lorsqu’il y a une mise à jour de la version existante. Ainsi, pour mettre à jour une version, nous devons incrémenter la valeur de la variable version passée dans le constructeur de la superclasse.

Dans la méthode onUpgrade, nous pouvons écrire des requêtes pour effectuer toute action requise. Dans la plupart des exemples, vous verrez que la ou les tables existantes sont abandonnées et que la méthode onCreate() est à nouveau appelée pour créer à nouveau des tables. Mais ce n’est pas obligatoire de le faire et tout dépend de vos exigences.

Nous devons changer la version de la base de données si nous avons ajouté une nouvelle ligne dans la table de la base de données. Si nous avons l’exigence de ne pas perdre les données existantes dans la table, alors nous pouvons écrire la requête alter table dans la méthode onUpgrade(SQLiteDatabase db,int oldVersion, int newVersion).

Pour plus de détails, lisez : Insertion, lecture, suppression & Opération de mise à jour en SQLite

Exemple de Sqlite dans Android Studio

Pour mieux comprendre Sqlite avant de lire l’exemple – Pour mieux comprendre la base de données SQlite, il est recommandé de lire d’abord l’article ci-dessous :

  • Introduction à SQLite et installation
  • Liste de tous les opérateurs dans SQLite
  • Type de données et commandes dans SQLite
  • Liste de toutes les clauses dans SQLite pour définir une condition spécifique
  • Insérer, Read, Delete & Opération de mise à jour en SQLite

Dans cet exemple, nous voulons simplement illustrer l’insertion, la mise à jour, la suppression et d’autres opérations de SQLite sur une table dans Android Studi. Nous avons créé une activité ayant textview, bouton et edittext au-dessus. Une autre classe qui étend SQLiteOpenHelper où les opérations de création et d’insertion seront effectuées. L’exemple contient une validation appropriée comme vous devez entrer des données avant d’exécuter toute opération.

Ci-après, vous pouvez télécharger le code, voir la sortie finale et l’explication étape par étape :

Télécharger le code

Opération d'insertion SQLite dans Android Studio

Opération d'insertion SQLite dans Android Studio

Étape 1 : créer un nouveau projet et le nommer SQLiteOperations.

Etape 2 : Ouvrir res -> layout -> activity_main.xml (ou) main.xml et ajouter le code suivant :

Dans cette étape, nous créons une mise en page dans notre fichier XML en ajoutant une zone de texte, des boutons, un edittext. Sur le bouton onclick est défini ce qui l’associe à la fonction liée.

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.sqliteoperations.MainActivity" android:background="@android:color/holo_blue_dark"> <TextView android:text="@string/username" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_marginTop="12dp" android:id="@+id/textView" android:textSize="18sp" android:textStyle="bold|italic" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:gravity="center" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textPersonName" android:ems="10" android:id="@+id/editName" android:textStyle="bold|italic" android:layout_below="@+id/textView" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:hint="Enter Name" android:gravity="center_vertical|center" /> <TextView android:text="@string/password" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="13dp" android:id="@+id/textView2" android:textStyle="bold|italic" android:textSize="18sp" android:layout_below="@+id/editName" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:gravity="center" android:hint="Enter Password" /> <Button android:text="@string/view_data" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button2" android:textSize="18sp" android:onClick="viewdata" android:textStyle="bold|italic" android:layout_alignBaseline="@+id/button" android:layout_alignBottom="@+id/button" android:layout_alignRight="@+id/button4" android:layout_alignEnd="@+id/button4" /> <Button android:text="@string/add_user" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button" android:textStyle="bold|italic" android:textSize="18sp" android:onClick="addUser" android:layout_marginLeft="28dp" android:layout_marginStart="28dp" android:layout_below="@+id/editPass" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginTop="23dp" /> <Button android:text="@string/update" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button3" android:onClick="update" android:textStyle="normal|bold" android:layout_below="@+id/editText3" android:layout_alignLeft="@+id/button4" android:layout_alignStart="@+id/button4" android:layout_marginTop="13dp" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="textPersonName" android:ems="10" android:id="@+id/editText6" android:layout_alignTop="@+id/button4" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:freezesText="false" android:hint="Enter Name to Delete Data" android:layout_toLeftOf="@+id/button2" android:layout_toStartOf="@+id/button2" /> <Button android:text="@string/delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="21dp" android:layout_marginEnd="21dp" android:id="@+id/button4" android:onClick="delete" android:textStyle="normal|bold" tools:ignore="RelativeOverlap" android:layout_marginBottom="41dp" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="textPersonName" android:ems="10" android:layout_marginTop="47dp" android:id="@+id/editText3" android:textStyle="bold|italic" android:textSize="14sp" android:layout_below="@+id/button" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginLeft="7dp" android:layout_marginStart="7dp" android:hint="Current Name" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textPassword" android:ems="10" android:layout_marginTop="11dp" android:id="@+id/editPass" android:hint="Enter Password" android:gravity="center_vertical|center" android:textSize="18sp" android:layout_below="@+id/textView2" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:textAllCaps="false" android:textStyle="normal|bold" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="textPersonName" android:ems="10" android:id="@+id/editText5" android:textStyle="bold|italic" android:textSize="14sp" android:hint="New Name" android:layout_alignTop="@+id/button3" android:layout_alignLeft="@+id/editText3" android:layout_alignStart="@+id/editText3" android:layout_marginTop="32dp" /></RelativeLayout>

Etape 3 : Maintenant, ouvrez l’app -> java -> package -> MainActivity.java et ajoutez le code ci-dessous.

Dans cette étape, nous avons utilisé les fonctions liées via le clic du bouton. Ces fonctions sont définies dans d’autres classes et sont utilisées ici. Chaque fonction renvoie une valeur qui définit no de rangs mis à jour, en utilisant que nous avons défini si l’opération est réussie ou non. Aussi l’utilisateur doit définir des données valides pour effectuer l’opération les champs vides ne seront pas accueillis et renverront une erreur .

package com.example.sqliteoperations;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.EditText;public class MainActivity extends AppCompatActivity { EditText Name, Pass , updateold, updatenew, delete; myDbAdapter helper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Name= (EditText) findViewById(R.id.editName); Pass= (EditText) findViewById(R.id.editPass); updateold= (EditText) findViewById(R.id.editText3); updatenew= (EditText) findViewById(R.id.editText5); delete = (EditText) findViewById(R.id.editText6); helper = new myDbAdapter(this); } public void addUser(View view) { String t1 = Name.getText().toString(); String t2 = Pass.getText().toString(); if(t1.isEmpty() || t2.isEmpty()) { Message.message(getApplicationContext(),"Enter Both Name and Password"); } else { long id = helper.insertData(t1,t2); if(id<=0) { Message.message(getApplicationContext(),"Insertion Unsuccessful"); Name.setText(""); Pass.setText(""); } else { Message.message(getApplicationContext(),"Insertion Successful"); Name.setText(""); Pass.setText(""); } } } public void viewdata(View view) { String data = helper.getData(); Message.message(this,data); } public void update( View view) { String u1 = updateold.getText().toString(); String u2 = updatenew.getText().toString(); if(u1.isEmpty() || u2.isEmpty()) { Message.message(getApplicationContext(),"Enter Data"); } else { int a= helper.updateName( u1, u2); if(a<=0) { Message.message(getApplicationContext(),"Unsuccessful"); updateold.setText(""); updatenew.setText(""); } else { Message.message(getApplicationContext(),"Updated"); updateold.setText(""); updatenew.setText(""); } } } public void delete( View view) { String uname = delete.getText().toString(); if(uname.isEmpty()) { Message.message(getApplicationContext(),"Enter Data"); } else{ int a= helper.delete(uname); if(a<=0) { Message.message(getApplicationContext(),"Unsuccessful"); delete.setText(""); } else { Message.message(this, "DELETED"); delete.setText(""); } } }}

Etape 4 : Dans cette étape créer une classe java myDbAdapter. java.

Dans celle-ci nous définissons les fonctions qui sont utilisées pour effectuer les opérations d’insertion, de mise à jour et de suppression dans SQLite. Plus loin cette classe créer une autre classe qui va étendre le SQLiteOpenHelper. Chaque fonction porte des méthodes équivalentes qui effectuent des opérations.

Note importante – Selon la convention de nommage, il est suggéré de définir la clé primaire en commençant par le trait de soulignement exemple : _id.

package com.example.sqliteoperations;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class myDbAdapter { myDbHelper myhelper; public myDbAdapter(Context context) { myhelper = new myDbHelper(context); } public long insertData(String name, String pass) { SQLiteDatabase dbb = myhelper.getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put(myDbHelper.NAME, name); contentValues.put(myDbHelper.MyPASSWORD, pass); long id = dbb.insert(myDbHelper.TABLE_NAME, null , contentValues); return id; } public String getData() { SQLiteDatabase db = myhelper.getWritableDatabase(); String columns = {myDbHelper.UID,myDbHelper.NAME,myDbHelper.MyPASSWORD}; Cursor cursor =db.query(myDbHelper.TABLE_NAME,columns,null,null,null,null,null); StringBuffer buffer= new StringBuffer(); while (cursor.moveToNext()) { int cid =cursor.getInt(cursor.getColumnIndex(myDbHelper.UID)); String name =cursor.getString(cursor.getColumnIndex(myDbHelper.NAME)); String password =cursor.getString(cursor.getColumnIndex(myDbHelper.MyPASSWORD)); buffer.append(cid+ " " + name + " " + password +" \n"); } return buffer.toString(); } public int delete(String uname) { SQLiteDatabase db = myhelper.getWritableDatabase(); String whereArgs ={uname}; int count =db.delete(myDbHelper.TABLE_NAME ,myDbHelper.NAME+" = ?",whereArgs); return count; } public int updateName(String oldName , String newName) { SQLiteDatabase db = myhelper.getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put(myDbHelper.NAME,newName); String whereArgs= {oldName}; int count =db.update(myDbHelper.TABLE_NAME,contentValues, myDbHelper.NAME+" = ?",whereArgs ); return count; } static class myDbHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "myDatabase"; // Database Name private static final String TABLE_NAME = "myTable"; // Table Name private static final int DATABASE_Version = 1;. // Database Version private static final String UID="_id"; // Column I (Primary Key) private static final String NAME = "Name"; //Column II private static final String MyPASSWORD= "Password"; // Column III private static final String CREATE_TABLE = "CREATE TABLE "+TABLE_NAME+ " ("+UID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+NAME+" VARCHAR(255) ,"+ MyPASSWORD+" VARCHAR(225));"; private static final String DROP_TABLE ="DROP TABLE IF EXISTS "+TABLE_NAME; private Context context; public myDbHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_Version); this.context=context; } public void onCreate(SQLiteDatabase db) { try { db.execSQL(CREATE_TABLE); } catch (Exception e) { Message.message(context,""+e); } } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { try { Message.message(context,"OnUpgrade"); db.execSQL(DROP_TABLE); onCreate(db); }catch (Exception e) { Message.message(context,""+e); } } }}

Etape 5 : Dans cette étape, créer une autre classe java Message.class

Dans celle-ci, il suffit d’ajouter un toast pour afficher le message. C’est facultatif, il suffit de l’ajouter encore et encore en définissant toast dans l’exemple.

package com.example.sqliteoperations;import android.content.Context;import android.widget.Toast;public class Message { public static void message(Context context, String message) { Toast.makeText(context, message, Toast.LENGTH_LONG).show(); }}

Sortie
Maintenant, exécutez l’application et visualisez la fonctionnalité ajoutée sur les boutons.
Opération de mise à jour et de suppression de Qlite dans Android Studio

Opération de mise à jour et de suppression de Qlite dans Android Studio

Ajouter & Récupérer une image de la base de données SQLite :

Pour comprendre comment ajouter ou récupérer une image du stockage externe du téléphone à l’application en utilisant la base de données SQLite. Veuillez lire notre tutoriel pas à pas sur l’ajout & récupérer une image depuis une base de données SQLite.

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *