Wie bekomme ich Daten aus einer bestimmten Zeile (Sqlite, Android Studio?
(Ich bin noch relativ neu in Android Studio, bzw. Programmieren generell, aber learning by doing und so) Ich will die Daten die ich zuvor in die Datenbank gespeichert habe, auslesen und als Beschriftung eines Buttons einfügen. Da ich keine Zeilen hinzufügen oder löschen will, werden bei erstellen der Tabelle gleich alle Zeilen mit erstellt, so dass ich deren IDs habe. Nun ich hab ich versucht eine Lösung zu finden, jedoch crasht die App wenn ich mein Herumgemurckse ausführe (was wahrscheinlich nicht verwunderlich ist ^^' ) Der Name der Datenbank usw.:
public static final String DATABASE_NAME = "stundenplan.db";
public static final String TABLE_NAME = "faecher";
public static final String COL_1 = "ID";
public static final String COL_2 = "fach";
public static final String COL_3 = "farbe";
Die getData() Methode aus der DatabaseHelper Class:
public Cursor getData(){
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
Cursor res = sqLiteDatabase.rawQuery("SELECT * FROM " + COL_2 + " WHERE " + COL_1 + " = 1", null);
return res;
}
Die onClick() Methode aus der (Tabbed) Activity:
btn_ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Cursor res = myDB.getData();
btn_mo1 = view.findViewById(R.id.btn_mo1);
btn_mo1.setText(res.getString(1));
}
});
Ich bekomme übrigens keinen Fehlercode oder so.
1 Antwort
Das hier ist natürlich falsch:
Cursor res = sqLiteDatabase.rawQuery("SELECT * FROM " + COL_2 + " WHERE " + COL_1 + " = 1", null);
Hier muss natürlich stehen
Cursor res = sqLiteDatabase.rawQuery("SELECT * FROM " + TABLE_NAME + " WHERE " + COL_1 + " = 1", null);
Wenn Du nicht zu einem späteren Zeitpunkt erlaubt willst, dass ein User Zeilen in diese Tabelle einfügt oder bearbeitet, dann ist es übrigens Schmarrn, das so zu machen. Dann bringt die Datenbank hier nicht nur keinen Vorteil, sie schafft (wie man sieht) sogar noch mehr Probleme.
Dann wäre vielleicht mal ein Exception-Stacktrace sinnvoll, meinst Du nicht? ;-)
Wenn es feste Daten sind, dann würde ich die einfach im Programm hinterlegen. Eine kleine Klasse machen, welche die Daten aufnimmt und dann in einem Array die konkreten Einträge machen mit den anzuzeigenden Daten.
COL_1 hast du als String definiert, in der Abfrage fehlen die Anführungszeichen (learning by doimg -- dass heist auch einiges ausprobieren, ebenm ob "" oder '' besser ist, aber ohne - geht nicht, schau dir mal die SQL-Syntax an ....)
Wo siehst Du denn die Definition? Ich seh da nix. Normalerweise finden auch - sofern möglich - automatisch Konvertierungen statt. Daher glaube ich nicht, dass hier Anführungszeichen fehlen.
Crasht immer noch.
Was wäre deiner Meinung nach sinnvoller?