Einträge in eine Datenbank mit mehreren Tabellen

A

alpha23

Neues Mitglied
0
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
 
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 ?
 
  • Danke
Reaktionen: alpha23
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..
 
Ja was für einen Fehler bekommst du denn?
 
  • Danke
Reaktionen: alpha23
super schule :D welche ist das denn ?

"es kommt ein fehler" ist keine fehlerbeschreibung :D
 
  • Danke
Reaktionen: alpha23
Naja, ob nun englisch oder deutsch ist völlig egal, solange nicht ein internationales Entwicklerteam daran arbeitet.
 
  • Danke
Reaktionen: alpha23
es kommt der fehler java.lang.ClassCastExceptionn: android.Widget.Button
 
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:
  • Danke
Reaktionen: alpha23
snowman2 schrieb:
Naja, ob nun englisch oder deutsch ist völlig egal, solange nicht ein internationales Entwicklerteam daran arbeitet.

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
 
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...
 

Ähnliche Themen

R
Antworten
6
Aufrufe
994
swa00
swa00
S
Antworten
33
Aufrufe
2.655
Sempervivum
S
D
Antworten
23
Aufrufe
2.498
Data2006
D
Zurück
Oben Unten