1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

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

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Nivel, 11.07.2011.

  1. Nivel, 11.07.2011 #1
    Nivel

    Nivel Threadstarter Junior Mitglied

    Beiträge:
    44
    Erhaltene Danke:
    0
    Registriert seit:
    31.05.2011
    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:w00t00:
    Gruß
    Nivel
     
  2. swordi, 11.07.2011 #2
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    "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?
     
    Nivel bedankt sich.
  3. Nivel, 11.07.2011 #3
    Nivel

    Nivel Threadstarter Junior Mitglied

    Beiträge:
    44
    Erhaltene Danke:
    0
    Registriert seit:
    31.05.2011
    Also ich habs mal getestet, leider ohne Erfolg. Kommt immernoch derselbe Fehler. Ich habe einfach mal Screenshots gemacht.
    Das kommt, wenn die .apk installiert wurde...also klicke ich auf Yes:
    Ich weiß ehrlich gesagt nicht, was er mir da sagen will:p
     
  4. Thyrion, 11.07.2011 #4
    Thyrion

    Thyrion Ehrenmitglied

    Beiträge:
    11,848
    Erhaltene Danke:
    2,452
    Registriert seit:
    21.07.2009
    Phone:
    Nexus 5X
    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.
     
    Nivel bedankt sich.
  5. Nivel, 11.07.2011 #5
    Nivel

    Nivel Threadstarter Junior Mitglied

    Beiträge:
    44
    Erhaltene Danke:
    0
    Registriert seit:
    31.05.2011
    Hi,
    ich habe das mal so gemacht...leider kommt der fehler immernoch
     
  6. Kranki, 11.07.2011 #6
    Kranki

    Kranki Ehrenmitglied

    Beiträge:
    3,831
    Erhaltene Danke:
    814
    Registriert seit:
    19.07.2009
    Tablet:
    Samsung Galaxy Tab 3 7.0 Lite
    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.
     
    Nivel bedankt sich.
  7. Nivel, 11.07.2011 #7
    Nivel

    Nivel Threadstarter Junior Mitglied

    Beiträge:
    44
    Erhaltene Danke:
    0
    Registriert seit:
    31.05.2011
    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.

    [​IMG]

    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: 12.07.2011
  8. Nivel, 13.07.2011 #8
    Nivel

    Nivel Threadstarter Junior Mitglied

    Beiträge:
    44
    Erhaltene Danke:
    0
    Registriert seit:
    31.05.2011
    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??
     
  9. the_alien, 13.07.2011 #9
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
  10. Nivel, 13.07.2011 #10
    Nivel

    Nivel Threadstarter Junior Mitglied

    Beiträge:
    44
    Erhaltene Danke:
    0
    Registriert seit:
    31.05.2011
    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.
     
  11. the_alien, 13.07.2011 #11
    the_alien

    the_alien Android-Lexikon

    Beiträge:
    1,559
    Erhaltene Danke:
    184
    Registriert seit:
    04.05.2009
    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: 13.07.2011
  12. Nivel, 13.07.2011 #12
    Nivel

    Nivel Threadstarter Junior Mitglied

    Beiträge:
    44
    Erhaltene Danke:
    0
    Registriert seit:
    31.05.2011
    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: 14.07.2011
  13. Nivel, 15.07.2011 #13
    Nivel

    Nivel Threadstarter Junior Mitglied

    Beiträge:
    44
    Erhaltene Danke:
    0
    Registriert seit:
    31.05.2011
    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: 15.07.2011
  14. Nivel, 21.07.2011 #14
    Nivel

    Nivel Threadstarter Junior Mitglied

    Beiträge:
    44
    Erhaltene Danke:
    0
    Registriert seit:
    31.05.2011
    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
     
  15. JanF, 22.07.2011 #15
    JanF

    JanF Android-Experte

    Beiträge:
    594
    Erhaltene Danke:
    79
    Registriert seit:
    31.03.2011
    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.
     
    Nivel bedankt sich.
  16. Nivel, 23.07.2011 #16
    Nivel

    Nivel Threadstarter Junior Mitglied

    Beiträge:
    44
    Erhaltene Danke:
    0
    Registriert seit:
    31.05.2011
    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
     
  17. JanF, 23.07.2011 #17
    JanF

    JanF Android-Experte

    Beiträge:
    594
    Erhaltene Danke:
    79
    Registriert seit:
    31.03.2011
    Nivel bedankt sich.
  18. Nivel, 23.07.2011 #18
    Nivel

    Nivel Threadstarter Junior Mitglied

    Beiträge:
    44
    Erhaltene Danke:
    0
    Registriert seit:
    31.05.2011
    ahh cool vielen dank...wollte das eh mal durchgehen, aber habe nicht geahnt, dass es mit meinem problem zu tun hat...
    Danke;-)
     

Diese Seite empfehlen