Die Verwaltung von Daten ist ein wichtiger Aspekt der Android-Entwicklung. In Android gibt es verschiedene Möglichkeiten, Daten zu speichern und zu verwalten, einschließlich Datenbanken und das Dateisystem.
Datenbanken in Android
SQLite ist eine leichtgewichtige, dateibasierte Datenbank, die in Android eingebettet ist. Sie bietet eine umfangreiche SQL-Schnittstelle und ist ideal für die Speicherung strukturierter Daten.
Um mit SQLite-Datenbanken in Android zu arbeiten, können Sie die
SQLiteDatabase-Klasse und verwandte APIs verwenden.
Allerdings kann dies ziemlich umständlich sein. Daher hat Google die
Room-Persistence-Bibliothek eingeführt, die eine Abstraktionsschicht
über SQLite bietet und das Arbeiten mit Datenbanken viel einfacher
macht.
Mit Room definieren Sie Entitäten (Datenmodelle) und Datenzugriffsobjekte (DAOs). Room generiert dann den notwendigen Code, um CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen) auf Ihren Entitäten durchzuführen.
Es ist auch wichtig zu beachten, dass alle Datenbankoperationen auf einem Hintergrundthread ausgeführt werden müssen, um den Hauptthread nicht zu blockieren. Room unterstützt Coroutines und RxJava, die das Arbeiten mit Hintergrundthreads erleichtern.
In Android gibt es verschiedene Möglichkeiten, auf Datenbanken zuzugreifen. Die beiden Hauptmethoden sind die direkte Verwendung der SQLite-API und die Verwendung der Room Persistence Library. Hier sind Beispiele für beide:
SQLite-API
Hier ist ein einfacher Code, der zeigt, wie man eine SQLite-Datenbank erstellt und eine einfache Abfrage ausführt:
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "Student.db";
public static final String TABLE_NAME = "student_table";
public static final String COL_1 = "ID";
public static final String COL_2 = "NAME";
public static final String COL_3 = "MARKS";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + TABLE_NAME
+" (ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT,MARKS INTEGER)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
onCreate(db);
}
public Cursor getAllData() {
SQLiteDatabase db = this.getWritableDatabase();
Cursor res = db.rawQuery("select * from "+TABLE_NAME,null);
return res;
}
}In diesem Beispiel wird zuerst eine SQLiteOpenHelper-Subklasse
erstellt, die dazu dient, eine Datenbank zu erstellen und zu
aktualisieren. Die Methode getAllData() gibt ein
Cursor-Objekt zurück, das die Ergebnisse einer “SELECT *“-Abfrage auf
der Datenbank enthält.
Room Persistence Library
Die Room-Persistence-Bibliothek ist eine Abstraktionsschicht über SQLite, die das Arbeiten mit Datenbanken einfacher macht. Hier ist ein einfaches Beispiel, wie man Room verwendet:
@Entity
public class User {
@PrimaryKey
public int id;
public String firstName;
public String lastName;
}
@Dao
public interface UserDao {
@Query("SELECT * FROM user")
List<User> getAll();
@Insert
void insertAll(User... users);
@Delete
void delete(User user);
}
@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();
}In diesem Beispiel definiert die @Entity-Annotation eine
SQLite-Tabelle. Jedes Feld in der Klasse repräsentiert eine Spalte in
der Tabelle. Die @Dao-Annotation definiert eine
Schnittstelle für den Zugriff auf die Datenbank. Jede Methode in der
Schnittstelle repräsentiert eine SQL-Abfrage. Schließlich repräsentiert
die @Database-Annotation eine Datenbank-Halter-Klasse. Jede
Datenbank wird durch eine abstrakte Klasse definiert, die von
RoomDatabase erweitert wird.
Bitte beachten Sie, dass diese Codebeispiele nur grundlegende Operationen zeigen. In einer echten App würden Sie wahrscheinlich weitere Funktionen wie Transaktionen, Fehlerbehandlung und so weiter benötigen.