Apps für Android programmieren leicht gemacht!
sql datenbanken nutzen

SQL Datenbank nutzen

SQL-Datenbanken sind eine der schnellsten und eineinfachsten Wege kleine und große Datenmengen zu speichern und dynamisch wieder auszulesen.

In diesem Tutorial erkläre ich euch wie ihr am schnellsten und effektivsten SQL Datenbanken nutzt. Im vorangegangenen Artikel haben wir ja bereits geklärt wie SQL Datenbanken erstellt werden. >> Hier geht es zu dem Artikel <<
Dieser Artikel ist übrigens aufbauend, auf dem vorangegangenen Artikel. Wieder verwenden wir unser Beispiel von zu programmierenden Shopping-App.

 

 

Daten speichern:

//Neuen Datenbankeintrag speichern	 	 
public void addArtikel(int artikelnummer, String artikelname, float preis, int lagernd){	 	 
 	 	 
 //Öffne die Datenbank, als beschreibbar	 	 
 SQLiteDatabase db = this.getWritableDatabase();
	 	 
 //Erstelle einen Eintrag und befülle ihn mit den Daten	 	 
 ContentValues eintrag = new ContentValues();	 	 
 eintrag.put("Artikelnummer", artikelnummer);	 	 
 eintrag.put("Artikelname", artikelname);	 	 
 eintrag.put("Preis", preis);	 	 
 eintrag.put("Lagernd", lagernd);
	 	 
 //Füge den Eintrag zur Datenbank hinzu	 	 
 db.insert("Artikel", null, eintrag);	 	 
}

 

Bestimmte Daten auslesen:

Speichern ist also kein Problem, aber das Auslesen der Daten leider schon.
Wir könnten uns eine Funktion schreiben, der wir die Artikelnummer übergeben und eine Information dieses Artikels zurückbekommen.
Doch genau hier liegt unser Problem! Wir können von einer Funktion immer nur eine Information zurückbekommen.
Wir müssten also für den Preis, den Artikelnamen und die Anzahl der lagernden Artikel jeweils eine Funktion schreiben und alle einzeln aufrufen, aber es geht einfacher.

Wir erstellen einfach eine Klasse, in die wir alle Informationen auf einmal „stopfen“ und geben einfach diese Klasse als Rückgabe zurück.
Wir geben also nur eine Information zurück (die Klasse), aber in der zurückgegebenen Klasse sind ja alle angeforderten Informationen enthalten. So haben wir unser Problem umgangen.
Clever nicht ?

Wir erstellen uns eine neue Klasse „Artikel“ und bestücken sie mit allen nötigen Variablen, um alle Informationen speichern zu können:

public class Artikel{
  
  public int artikelnummer;
  public String artikelname;
  public float preis;
  public int lagernd;
}

 

Ab sofort ist es uns möglich mittels einer Funktion alle dauen der Datenbank auf einmal auszulesen:

//Bestimmten Artikel anhand der artikelnummer auslesen und Informationen innerhalb von dem Objekt a des Typs "Artikel" zurückgeben
public Artikel getArtikel(int artikelnummer){

    //Erstelle ein Objekt namens a, vom Typ Artikel.
    Artikel a = new Artikel();

    //Öffne lesbar die Datenbank
    SQLiteDatabase db = this.getReadableDatabase();

    //Lese den Datenbankeintrag
    Cursor res =  db.rawQuery( "select * from Artikel where Artikelnummer = " + artikelnummer + "", null );
    res.moveToFirst();

    //Fütter das Objekt a mit den nötigen Informationen
    a.artikelnummer = artikelnummer;
    a.artikelname = res.getString(res.getColumnIndex("Artikelname"));
    a.preis = res.getFloat(res.getColumnIndex("Preis"));
    a.lagernd = res.getInt(res.getColumnIndex("Lagernd"));

    //Gib a, mit allen Informationen, zurück
    res.close();
    return a;

}

 

 

Alle Daten auslesen:

Denkbar wäre es auch, wenn man sich nicht ausschließlich einen Artikel ausgeben lassen möchte, sondern einfach Alle.
Unsere Funktion ist schnell erstellt:

//Alle Daten der Datenbank auslesen, indem man eine Liste an Objekten des Typs Artikel erstellt
public ArrayList<Artikel> getAlle(){

  //Erstelle eine Liste und ein Objekt a, welches wir später in die Liste einfügen
    Artikel a;
    ArrayList<Artikel> array_list = new ArrayList<>();

    //Öffne lesbar die Datenbank
    SQLiteDatabase db = this.getReadableDatabase();

    //Lese alle Datenbankeinträge, sortiert nach der Artikelnummer absteigend
    Cursor res =  db.rawQuery( "select * from Artikel order by Artikelnummer asc", null );

    //Gehe zum ersten Datenbankeintrag
    res.moveToFirst();
    while(!res.isAfterLast()){

    	//Erstelle a neu, um es zu beschreiben und anschließend eine Kopie von a in die Liste zu kopieren
        a = new Artikel();
        
        //Fütter das Objekt a mit den nötigen Informationen
      a.artikelnummer = artikelnummer;
      a.artikelname = res.getString(res.getColumnIndex("Artikelname"));
      a.preis = res.getFloat(res.getColumnIndex("Preis"));
      a.lagernd = res.getInt(res.getColumnIndex("Lagernd"));

      //Kopiere a in die Liste und gehe einen Datenbankeintrag weiter
        array_list.add(a);
        res.moveToNext();
    }

    //Gib die Liste mit den verschiedenen Kopien von a zurück
    res.close();
    return array_list;
}

Marvin

Ich bin 23 Jahre jung und studiere zurzeit Wirtschaftsinformatik an der Georg-August-Universität in Göttingen. Ich bin ein Mensch, der sich neben der Programmierung noch für tausend andere Dinge interessiert, die mal mehr und mal weniger verrückt sind. Vor allem aber bin ich Feuer und Flamme mit der Programmierung von eigenen kleinen Apps und Programmen, die mein Leben bereichern.

4 Kommentare

*Pflichtfeld

  • Hallo.

    Ich habe eine App in der ich meine Dienste aus dem Internet lade und anzeigen lasse.
    Nun würde ich die Dienste (PDF.Dateien) gerne direkt in der App speichern, so das die App kein Internet braucht.
    Es gibt verschiedene Tagesarten (TA 11, TA12 usw…) und in jeder TA sind 12 Dienstpläne als PDF.Datei.
    Wie bekomme ich das am Besten hin?
    Können Sie mir ein Beispiel geben?
    Vielen Dank im voraus.

    W. Pfeil

    • Hallo Herr Pfeil,
      willkommen auf Droid-Lernen.de.

      Sollen die Dienstpläne nur heruntergeladen und angezeigt oder auch im Klartext in einer Datenbank gespeichert werden?

      Gruß,
      Marvin

      • Hallo Marvin,

        die Dienstpläne sollen nur angezeigt werden. Also direkt in der App integriert sein wenn die App installiert wird. Ich möchte das die App kein Internet braucht um die Pläne aufzurufen. Da die Dienstpläne sich recht häufig im Jahr ändern.
        Oder wäre da die Datenbank die bessere Lösung?

      • Hallo Wosi34,

        Ich nehme Mal einfach an, dass die Dienstpläne zwar in einer festgelegten Form rotieren, sich aber sonst nicht weiter ändern.
        Wenn dem so ist, dass könnte man beides umsetzen. Wobei beide Lösungen mit Vor- und Nachteilen behaftet sind.

        Für eine Datenbanklösung ist deutlich mehr Programmieraufwand nötig und die zu rotierenden Dienstpläne müssen dann vor Kompilierung eingehändig eingetragen werden. Diesen Aufwand würde man sich bei der PDF Lösung sparen.
        Allerdings ist eine Datenbank Lösung auch deutlich performanter, besser in das Design der App zu integrieren und dürfte in eine kleinere App Größe resultieren.

        Was nun genau umgesetzt wird liegt bei dir, deinem Wissen in der Programmierung und der Zeit, die du dafür aufwenden kannst.

        Ich hoffe ich konnte dir mit dieser groben Einschätzung helfen.

        Gruß,
        Marvin