Mehre Daten in SQL-Datenbank| einzelne Zeile aus Datenbank löschen

N

Nivel

Neues Mitglied
0
Hi,
ich habe ein paar Probleme mit dem Speichern in eine SQL Datenbank oder mit der Datenbank an sich. Ich habe normal eine Tabelle in der Datenbank erstellt. Nun sieht meine App so aus, dass ich anfangs nur einen EditText hatte. Die eingebenen Sachen sollen in der Datenbank gespeichert werden.
Später sollen diese Daten durch einen Button-Klick in einer ListView andgezeigt werden.
Dies funktioniert auch wunderbar.
Doch nun habe ich bei meiner folgenden Arbeit Probleme:
1)
Da ich nun aber 2 EditTexte einbauen wollte, stellt sich mir die Frage, wie ich dies mache.
Anfangs habe ich weitere Spalten in der Datenbank erstellt:
Code:
private static final String KLASSEN_CREATE = "create table klassen (_id integer primary key autoincrement, "
        + "name text not null,  preis text not null);";
Dann habe ich eine Methode, die die Cursor erstellt, geschrieben:
Code:
private void ladeDaten() {
        Cursor klassenCursor = mDatenbank.rawQuery(KLASSEN_SELECT_RAW, null);
        startManagingCursor(klassenCursor);
        
        SimpleCursorAdapter klassenAdapter = new SimpleCursorAdapter(this, 
                                                                    android.R.layout.two_line_list_item, 
                                                                    klassenCursor, 
                                                                    new String[]{ "name","preis"},
                                                                    new int[]{android.R.id.text1, android.R.id.text2});
        setListAdapter(klassenAdapter);
Code:
private static final String KLASSEN_SELECT_RAW = "SELECT _id, name FROM klassen, preis FROM klassen";
so siehts aus, nur die App startet einfach nicht. Ich habe schon getestet, es muss an "preis" liegen. Was mache ich falsch, bzw. was muss ich ändern? Als Fehler kommt immer Source not found.
Ich weiß nicht, ob das wichtig ist, aber so versuche ich die Daten aus den EditTexten in die Datenbank zu speichern:
Code:
artikel = (EditText)findViewById(R.id.artikel);
          preis = (EditText)findViewById(R.id.preis);
        ContentValues werte = new ContentValues();
        
        werte.put("name", artikel.getText().toString());
        werte.put("preis", preis.getText().toString());
        mDatenbank.insert("klassen", null, werte);
        ladeDaten();
Ich hoffe, ihr könnt mir helfen:p

zum 2.Problem:
Ich habe einen OnItemClickListener dem ListView hinzugefügt. Nun soll auf einen Klick ein AlertDialog starten, funktioniert auch soweit.
Nun möchte ich, dass man dieses "item" aus der ListView, also aus der Datenbank löscht. Da die Daten ja durch EditTexte ausgelesen werden, weiß ich die id der Zeile bzw. finde ich keine Lösung dafür, um diese herauszufinden.
Logischerweise möchte ich dann diese Zeile aus der Datenbank löschen. Doch leider weiß ich auch da nicht, wie ich das anstellen soll, da ich noch nicht so oft mit ner Datenbank gearbeitet habe.


Ich hoffe das war nicht zu viel und ich hoffe, dass ihr mein Problem verstanden habt::p

Vielen Dank schonmal für eure Hilfe:scared:
Gruß
Nivel
 
"Als Fehler kommt immer Source not found."

was meinst du damit genau??


eine vermutung:
lösche die app mal vom händy und installier sie neu. macht das was besser?
 
  • Danke
Reaktionen: Nivel
Also ich habs mal getestet, leider ohne Erfolg. Kommt immernoch derselbe Fehler. Ich habe einfach mal Screenshots gemacht.
fehler1.png
Das kommt, wenn die .apk installiert wurde...also klicke ich auf Yes:
Ich weiß ehrlich gesagt nicht, was er mir da sagen will:p
 
Nivel schrieb:
Code:
private static final String KLASSEN_SELECT_RAW = "SELECT _id, name FROM klassen, [I]preis[/I] [I]FROM klassen[/I]";
Das ist kein gültiges SQL. Vermutlich wolltest du SELECT _id, name, preis FROM klassen schreiben.

EDIT: Name ist ein ungünstiger Spaltenname, da er oft intern belegt ist. Dann müsstest du [name] schreiben.
 
  • Danke
Reaktionen: Nivel
Hi,
ich habe das mal so gemacht...leider kommt der fehler immernoch
 
Der wird doch da nicht eine RuntimeException werfen. Was steht denn im logcat?

Die Fehlermeldung mit dem "source not found" rührt übrigens daher, dass im Framework eine Exception fliegt und du keinen Source dafür hast. Vermutlich ist das Dokumentations-Package nicht installiert.
 
  • Danke
Reaktionen: Nivel
kann sehr gut sein, wie mache ich das denn?
ich hab mir mal LogCat angeschaut und da kommt folgender fehler, der etwas mit der SQL Datenbank zu tun hat.

fehler3.png


das bedeutet ja, dass er in der Datenbank-Klasse diese Spalte nicht erstellt...doch was habe ich falsch gemacht?


ohh mist, habs geschafft. Danke an euch, ich musste, wie swordi schon sagte, einfach nochmal die Datenban löschen, damit sie neu erstellt werden kann mit der neuen Spalte. Somit wäre das erste Problem gelöst;-)
 
Zuletzt bearbeitet:
Ich pushe ja nur ungern, aber wie ist das mit dem zweiten Problem?
und wie bekomme ich überhaupt einzelne Daten aus der Tabelle, also über eine Java-Code??
 
das mit dem delete hatte ich auch...nur irgendwie muss ich ja die _id des Items aus der Listview finden, da ich auf einen Klick darauf dieses löschen möchte.
 
Naja, du kriegst die id des Items übergeben. Hast den Cursor oder kannst ihn dir aus dem Adapter holen und dann holst du die entsprechende _id einfach aus dem Cursor an position id.
 
Zuletzt bearbeitet:
ahh alles klar...guck ich mir dann mal an
sorry, aber ich habe wirklich noch nicht oft damit gearbeitet, aber die position des cursors wird in der Listview in Zahlen ausgegeben, oder?
also kann ich das in ne Variable speichern und mit der _id aus der Tabelle gleichsetzen und dann damit die zeile aus der Datenbank löschen?
 
Zuletzt bearbeitet:
mhh ich hab jetzt echt lange gesucht, aber irgendwie nichts dazu gefunden..ich habe auch irgendwie keinen anhaltspunkt, wonach ich suchen könnte, da ich noch nie zuvor mit einer datenbank wirklich gearbeitet habe und schon gar nicht im zusammenhang mit einer ListView-.-
wär echt super, wenn ihr mir das mit der postion nochmal erläutern könntet, oder mir ne seite geben könntet, wo das erklärt wird.

Also ich habe verstanden, dass ich bei onItemSelected die position des ausgewählten items rausfinden muss. Nur leider fehlt mri, wie gesagt der ansatz, bzw die Code-kenntnisse:'-(
Ich versuche auch die position des items mit der _id gleichzusetzen in der WHERE bedingung, nur irgendwie bekomm ich das nicht hin..-.-
Code:
String t = String.valueOf(position);
mDatenbank.delete("klassen", "WHERE _id = ?",new String[]{t}  );
ich dachte ich musste den Wert von der position erstmal in ein String speichern, weil man irgendwie kein in nehmen konnte-.- wie gesagt, weiß auch nicht weiter...im Logcat steht, dass die WHERE-clause falsch ist..
 
Zuletzt bearbeitet:
ach ich push jetzt nur echt ungern zum dritten mal, aber ich bekomm das einfach nicht hin, die position des cursors mit der _id aus der Tabelle gleichzusetzen-.-

bitte
Gruß
Nivel
 
Das Gleichsetzen von id und position ist sehr gewagt (d.h. im Allgemeinen wohl falsch), hier musst Du Dir was anderes überlegen (zum Beispiel den Cursor an die richtige Position fahren und dann die _id auslesen).

Bei Deiner WHERE-Clause steht das Schlüsselwort WHERE zu viel.
 
  • Danke
Reaktionen: Nivel
oke und wie mache ich das am besten? haste vllt ne seite, wo der cursor erklärt wird? habe das noch nicht of gemacht:p
 
  • Danke
Reaktionen: Nivel
ahh cool vielen dank...wollte das eh mal durchgehen, aber habe nicht geahnt, dass es mit meinem problem zu tun hat...
Danke;-)
 

Ähnliche Themen

S
Antworten
33
Aufrufe
2.646
Sempervivum
S
M
  • mafoma63
Antworten
2
Aufrufe
757
swa00
swa00
B
Antworten
3
Aufrufe
1.299
swa00
swa00
Zurück
Oben Unten