Introducció

SQLite és una biblioteca de programari que proporciona un sistema de gestió de bases de dades relacional. És lleugera, autònoma i no necessita un servidor separat per funcionar, la qual cosa la fa ideal per a aplicacions mòbils. En aquest tema, aprendrem com utilitzar SQLite per emmagatzemar i gestionar dades en una aplicació Android.

Objectius

  • Comprendre què és SQLite i per què és útil en el desenvolupament d'aplicacions Android.
  • Aprendre a crear i gestionar una base de dades SQLite.
  • Implementar operacions CRUD (Crear, Llegir, Actualitzar, Eliminar) en una base de dades SQLite.

Conceptes Clau

  • SQLiteOpenHelper: Una classe auxiliar que facilita la creació i gestió de bases de dades.
  • SQLiteDatabase: Una classe que proporciona mètodes per interactuar amb la base de dades.
  • ContentValues: Una classe que emmagatzema parells clau-valor per utilitzar-los en operacions de base de dades.

Creació d'una Base de Dades SQLite

Pas 1: Crear una Classe que Extengui SQLiteOpenHelper

public class MyDatabaseHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "mydatabase.db";
    private static final int DATABASE_VERSION = 1;

    public MyDatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_TABLE = "CREATE TABLE my_table (" +
                "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
                "name TEXT, " +
                "age INTEGER)";
        db.execSQL(CREATE_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS my_table");
        onCreate(db);
    }
}

Explicació del Codi

  • DATABASE_NAME: El nom de la base de dades.
  • DATABASE_VERSION: La versió de la base de dades. S'utilitza per gestionar actualitzacions de l'esquema.
  • onCreate(): Es crida quan la base de dades es crea per primera vegada. Aquí definim l'estructura de la taula.
  • onUpgrade(): Es crida quan la base de dades necessita ser actualitzada. Aquí gestionem els canvis d'esquema.

Operacions CRUD

Crear (Insertar Dades)

public void addRecord(String name, int age) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put("name", name);
    values.put("age", age);
    db.insert("my_table", null, values);
    db.close();
}

Llegir (Recuperar Dades)

public List<String> getAllRecords() {
    List<String> records = new ArrayList<>();
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery("SELECT * FROM my_table", null);
    if (cursor.moveToFirst()) {
        do {
            String record = "ID: " + cursor.getInt(0) + ", Name: " + cursor.getString(1) + ", Age: " + cursor.getInt(2);
            records.add(record);
        } while (cursor.moveToNext());
    }
    cursor.close();
    db.close();
    return records;
}

Actualitzar (Modificar Dades)

public void updateRecord(int id, String name, int age) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put("name", name);
    values.put("age", age);
    db.update("my_table", values, "id = ?", new String[]{String.valueOf(id)});
    db.close();
}

Eliminar (Esborrar Dades)

public void deleteRecord(int id) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete("my_table", "id = ?", new String[]{String.valueOf(id)});
    db.close();
}

Exercicis Pràctics

Exercici 1: Crear una Base de Dades

  1. Crea una nova classe que extengui SQLiteOpenHelper.
  2. Defineix una taula amb les columnes id, name i age.
  3. Implementa els mètodes onCreate() i onUpgrade().

Exercici 2: Implementar Operacions CRUD

  1. Afegeix mètodes per inserir, llegir, actualitzar i eliminar registres a la teva classe de base de dades.
  2. Prova aquests mètodes en una activitat o fragment.

Solucions

Solució a l'Exercici 1

public class MyDatabaseHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "mydatabase.db";
    private static final int DATABASE_VERSION = 1;

    public MyDatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_TABLE = "CREATE TABLE my_table (" +
                "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
                "name TEXT, " +
                "age INTEGER)";
        db.execSQL(CREATE_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS my_table");
        onCreate(db);
    }
}

Solució a l'Exercici 2

public void addRecord(String name, int age) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put("name", name);
    values.put("age", age);
    db.insert("my_table", null, values);
    db.close();
}

public List<String> getAllRecords() {
    List<String> records = new ArrayList<>();
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.rawQuery("SELECT * FROM my_table", null);
    if (cursor.moveToFirst()) {
        do {
            String record = "ID: " + cursor.getInt(0) + ", Name: " + cursor.getString(1) + ", Age: " + cursor.getInt(2);
            records.add(record);
        } while (cursor.moveToNext());
    }
    cursor.close();
    db.close();
    return records;
}

public void updateRecord(int id, String name, int age) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put("name", name);
    values.put("age", age);
    db.update("my_table", values, "id = ?", new String[]{String.valueOf(id)});
    db.close();
}

public void deleteRecord(int id) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete("my_table", "id = ?", new String[]{String.valueOf(id)});
    db.close();
}

Conclusió

En aquest tema, hem après com utilitzar SQLite per gestionar dades en una aplicació Android. Hem vist com crear una base de dades, definir la seva estructura i implementar operacions CRUD. Aquestes habilitats són fonamentals per a qualsevol desenvolupador d'Android que necessiti emmagatzemar i gestionar dades de manera eficient.

En el següent tema, explorarem com utilitzar Room, una biblioteca de persistència de dades que simplifica encara més la gestió de bases de dades en Android.

© Copyright 2024. Tots els drets reservats