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

Einträge in eine Datenbank mit mehreren Tabellen

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von alpha23, 28.02.2012.

  1. alpha23, 28.02.2012 #1
    alpha23

    alpha23 Threadstarter Neuer Benutzer

    Beiträge:
    3
    Erhaltene Danke:
    0
    Registriert seit:
    24.02.2012
    Ich habe folgendes problem! ich versuche gerade für ein Schulprojekt einen Vokabeltrainer auf Android-Basis zu Programmieren und bekomme probleme beim insert befehl! Ich habe eine Datenbankklasse in der ich meine zwei Tabellen anlege.
    Und dann habe ich mehrere activitys in denen ich über ein Textfeld in diese Datenbank über den Insertbefehl etwas eintrage. In die erste Tabelle Funktioniert das auch und ich kann den Eintrag auch wieder Löschen aber in der Zweiten Tabelle weiß ich jetzt nicht wie ich die einträge machen soll und wie ich die Beiden Tabellen mit einander Verknüpfe.

    Hier der Quelltext dazu!

    ----Datenbanklasse--------->>>

    package com.vokabeltrainer;

    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteOpenHelper;

    public class Datenbank extends SQLiteOpenHelper{

    private static final String DB_NAME = "Tabellen";
    private static final int DB_VERSION = 1;
    private static String KLASSEN_DROP =
    "DROP TABLE IF EXISTS Lektionen";
    private static final String KLASSEN1_CREATE =

    "CREATE TABLE Lektionen(" +
    "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
    "Lektionsname TEXT NOT NULL"+
    ")";
    private static final String KLASSEN_SELECT_RAW =
    "SELECT _id, Lektionsname from Lektionen";
    private static final String KLASSEN2_CREATE =
    "CREATE TABLE klassen(" +
    "_id PRIMARY KEY AUTOINCREMENT," +
    "vokabel varchar(50) NOT NULL"+
    "uebersetzung varchar(50) NOT NULL"+
    "kommentar varchar(50)"+
    "_id integer"+
    "lernfortschritt integer not null"+
    "lernhauefigkeit int not null"+
    ")";


    public Datenbank(Context context, String name12) {
    super(context, DB_NAME, null, DB_VERSION);

    }

    @Override
    public void onCreate(SQLiteDatabase db) {
    db.execSQL(KLASSEN1_CREATE);
    db.execSQL(KLASSEN2_CREATE);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL(KLASSEN_DROP);
    this.onCreate(db);

    }
    }//mainClass




    -------LektionenOeffnenActivity---->>>>>>


    package com.vokabeltrainer;
    import android.app.ListActivity;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.os.Bundle;
    import android.widget.SimpleCursorAdapter;
    import android.widget.Toast;


    public class LektionOeffnenActivity extends ListActivity{

    private SQLiteDatabase mDatenbank;
    private Datenbank mHelper;
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mainleoe);
    mHelper = new Datenbank(this, null);
    }//LektionOeffnenActivity


    @Override
    protected void onPause() {
    mDatenbank.close();
    Toast.makeText(this,
    R.string.datenBankSchliessen,
    Toast.LENGTH_SHORT).show();


    super.onPause();
    }

    @Override
    protected void onResume() {
    super.onResume();
    mDatenbank = mHelper.getReadableDatabase();
    Toast.makeText(this,
    R.string.datenBankOeffnen,
    Toast.LENGTH_SHORT).show();
    ladeDaten();
    }
    private void ladeDaten() {
    // Cursor klassencursor =Datenbank.rawQuery(KLASSEN_SELECT_RAW, null); //zeiger auf element der ergebnismenge
    // mDatenbank.rawQuery(KLASSEN_SELECT_RAW, null);

    Cursor klassencursor =mDatenbank.query("Lektionen",
    new String[] {
    "_id",
    "Lektionsname"
    },
    null, null, null, null, null);
    startManagingCursor(klassencursor);
    SimpleCursorAdapter klassenadapter = new SimpleCursorAdapter (this, android.R.layout.simple_list_item_1,klassencursor,
    new String[] {"Lektionsname"},
    new int []{android.R.id.text1}
    );
    setListAdapter(klassenadapter);
    }


    }//mainClass










    ------------LektionErstellenActivity------>>>>>>









    package com.vokabeltrainer;
    import android.app.ListActivity;
    import android.content.ContentValues;
    import android.content.Intent;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.ContextMenu;
    import android.view.ContextMenu.ContextMenuInfo;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ListView;
    import android.widget.SimpleCursorAdapter;
    import android.widget.TextView;
    import android.widget.Toast;


    public class LektionErstellenActivity extends ListActivity{
    private SQLiteDatabase mDatenbank;
    private Datenbank mHelper;

    final static String MY_DB_NAME= "Tabellen";
    final static String MY_DB_TABLE="Lektionen";
    final static String tag="ensacom";
    private static final int COLUM_INDEX_TITLE=1;

    public static final int EDIT_ID = Menu.FIRST;
    public static final int DELETE_ID = Menu.FIRST+1;


    private static final String KLASSEN_SELECT_RAW =
    "SELECT _id, Lektionsname FROM Lektionen";
    private static final int COLUMN_INDEX_TITLE = 0;
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mainle);
    mHelper = new Datenbank(this, null);
    registerForContextMenu(getListView());

    Button lektionAnlegen;
    ListView lv = getListView();
    lv.setTextFilterEnabled(true);
    lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view,
    int position, long id) {
    // When clicked, show a toast with the TextView text
    Intent myIntent = new Intent(view.getContext(),LektionEingebenActivity.class);
    startActivityForResult(myIntent,0);


    Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
    Toast.LENGTH_SHORT).show();
    mDatenbank.close();

    }
    });


    lektionAnlegen = (Button) this.findViewById(R.id.lektionAnlegen);
    lektionAnlegen.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
    EditText et =
    (EditText) findViewById(R.id.textFeld);
    ContentValues werte = new ContentValues();
    werte.put("Lektionsname", et.getText().toString());
    mDatenbank.insert("Lektionen",null,werte);
    ladeDaten();
    et.setText("");
    }//LEKTION ANLEGEN
    });

    }//LektionErstellenActivity
    @Override
    protected void onPause() {
    mDatenbank.close();
    Toast.makeText(this,
    R.string.datenBankSchliessen,
    Toast.LENGTH_SHORT).show();

    super.onPause();
    }
    @Override
    protected void onResume() {
    super.onResume();
    mDatenbank = mHelper.getReadableDatabase();
    Toast.makeText(this,
    R.string.datenBankOeffnen,
    Toast.LENGTH_SHORT).show();
    ladeDaten();
    }
    private void ladeDaten() {
    // Cursor klassencursor =Datenbank.rawQuery(KLASSEN_SELECT_RAW, null); //zeiger auf element der ergebnismenge
    mDatenbank.rawQuery(KLASSEN_SELECT_RAW, null);

    Cursor klassencursor =mDatenbank.query("Lektionen",
    new String[] {
    "_id",
    "Lektionsname"
    },
    null, null, null, null, null);
    startManagingCursor(klassencursor);
    SimpleCursorAdapter klassenadapter = new SimpleCursorAdapter (this, android.R.layout.simple_list_item_1,klassencursor,
    new String[] {"Lektionsname"},
    new int []{android.R.id.text1}
    );
    setListAdapter(klassenadapter);
    }




    //---------------------->>>>

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    Log.d("Tabellen", "Test ");

    AdapterView.AdapterContextMenuInfo info;
    try {
    info = (AdapterView.AdapterContextMenuInfo) menuInfo;
    } catch (ClassCastException e) {
    Log.e("Tabellen", "bad menuInfo", e);
    return;
    }

    Cursor cursor = (Cursor) getListAdapter().getItem(info.position);
    if (cursor == null) {
    // For some reason the requested item isn't available, do nothing
    return;
    }

    menu.setHeaderTitle(cursor.getString(COLUMN_INDEX_TITLE));

    // menu.add(0, EDIT_ID, 0, R.string.cmEdit);
    menu.add(0, DELETE_ID, 0, "Löschen");

    }
    public boolean onContextItemSelected(MenuItem item) {
    AdapterView.AdapterContextMenuInfo info;
    try {
    info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    } catch (ClassCastException e) {
    Log.e("Tabellen", "bad menuInfo", e);
    return false;
    }

    switch (item.getItemId()) {
    // case EDIT_ID:
    // Log.d("Guide", "Bearbeite Sehenswürdigkeit: "+""+info.id);
    // return true;
    case DELETE_ID:
    Log.d("Lektionen", "Lösche Lektion: "+""+info.id);
    delete(info.id);
    ladeDaten();
    return true;

    default:
    Log.d("Lektionen", "Test "+""+info.id);
    return super.onContextItemSelected(item);
    }
    }

    public void delete(long _id)
    {
    String message;
    message="DELETE FROM Lektionen WHERE _id="+_id;
    mDatenbank.execSQL(message);
    // return Datenbank.delete(MY_DB_TABLE, _id + "=" + _id, null) > 0;
    }

    }//mainClass




    Die Activity in der der Eintag in die zweite Tabelle erfolgen soll und in der die beiden Tabellen miteinander Verknüpft werden.


    -----------VokabelEingebenActivity--------->>>>>>>





    package com.vokabeltrainer;
    import android.app.ListActivity;
    import android.content.ContentValues;
    import android.database.sqlite.SQLiteDatabase;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;


    public class LektionEingebenActivity extends ListActivity{
    private SQLiteDatabase mDatenbank;
    private Datenbank mHelper;


    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mainlekein);


    Button vokabelAnlegen;
    vokabelAnlegen = (Button) this.findViewById(R.id.button1);
    vokabelAnlegen.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {

    // Context context = getApplicationContext();
    // CharSequence text = "Hello toast!";
    // int duration = Toast.LENGTH_SHORT;
    //
    // Toast toast = Toast.makeText(context, text, duration);
    // toast.show();








    EditText et = (EditText) findViewById(R.id.button1);
    //
    //
    ContentValues werte = new ContentValues();
    werte.put("vokabel", et.getText().toString());
    werte.put("uebersetzung", et.getText().toString());
    mDatenbank.insert("klassen", null, werte);
    // ladeDaten();

    }
    });

    }//LektionEingebenActivity

    }//mainClass




    Vielen Dank schon mal;)
    alpha23
     
  2. swordi, 28.02.2012 #2
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    wenn du es schaffst in eine tabelle zu schreiben, dann ist es genau das gleiche wenn du in die andere tabelle schreiben willst.

    so ne lange code wurst mag ich mir nicht anschauen.

    btw: habt ihr in eurer schule nicht gelernt, dass man lieber englisch nutzt als deutsch im code ?
     
    alpha23 bedankt sich.
  3. alpha23, 28.02.2012 #3
    alpha23

    alpha23 Threadstarter Neuer Benutzer

    Beiträge:
    3
    Erhaltene Danke:
    0
    Registriert seit:
    24.02.2012
    Danke für die schnelle Antwort. Nein uns wurde es so beigebracht. Und da es für die schule ist will ich es auch nicht anders machen.

    Ich bekommen es einfach nicht hin in die zweite tabelle zu schreiben. Es kommt schon ein fehler wenn ich nur den onResume Befehl auführe..
     
  4. snowman2, 28.02.2012 #4
    snowman2

    snowman2 Erfahrener Benutzer

    Beiträge:
    153
    Erhaltene Danke:
    18
    Registriert seit:
    07.12.2011
    Ja was für einen Fehler bekommst du denn?
     
    alpha23 bedankt sich.
  5. swordi, 28.02.2012 #5
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    super schule :D welche ist das denn ?

    "es kommt ein fehler" ist keine fehlerbeschreibung :D
     
    alpha23 bedankt sich.
  6. snowman2, 28.02.2012 #6
    snowman2

    snowman2 Erfahrener Benutzer

    Beiträge:
    153
    Erhaltene Danke:
    18
    Registriert seit:
    07.12.2011
    Naja, ob nun englisch oder deutsch ist völlig egal, solange nicht ein internationales Entwicklerteam daran arbeitet.
     
    alpha23 bedankt sich.
  7. alpha23, 28.02.2012 #7
    alpha23

    alpha23 Threadstarter Neuer Benutzer

    Beiträge:
    3
    Erhaltene Danke:
    0
    Registriert seit:
    24.02.2012
    es kommt der fehler java.lang.ClassCastExceptionn: android.Widget.Button
     
  8. DieGoldeneMitte, 28.02.2012 #8
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Ohne Zeilennummer und Code(ausschnitt) kann man nur raten:

    Du machst einen findViewById(), und willst das Ergebnis an einen Button zuweisen, aber unter der id ist ein anderer View hinterlegt.

    ADD: ... oder umgekehrt :D
     
    Zuletzt bearbeitet: 28.02.2012
    alpha23 bedankt sich.
  9. swordi, 28.02.2012 #9
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    ja prinzipiell schon

    aber
    1) wenn man hilfe möchte, sollte man sich auch an standards halten.
    2) wenn man es von anfang an anständig macht, spart man sich später die umstellung
     
  10. DieGoldeneMitte, 29.02.2012 #10
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Das mit dem Englisch ist so eine Sache. Wenn man Software für eine Branche entwickelt, in der es sehr "deutsch" zugeht (ich meine jetzt keinen nazisch***, sondern Steuerrecht und dergleichen :D), is es manchmal schwer, sich für Abstraktionen, die es in englisch einfach nicht gibt, englische Ausdrücke aus den Fingern zu saugen.

    Aber das nur so am rande...
     

Diese Seite empfehlen