Wieso kann ich nicht auf Datenbank zugreifen?

D

DalvikCoder

Neues Mitglied
0
Hallo Leute,

ich versuche aktuell ein kleines Programm zu schreiben mit dem ich Daten aus einer DB lesen und darstellen kann.

Das Programm funktioniert insgesamt, aber wenn ich die Zeile mit Insert Into oder die Anweisung zum Lesen der Daten einfüge kommt im Emulator immer die Fehlermeldung Prozess wurde unterbrochen.

Was ist an dem Code den falsch?? Siehe unten:



public final static String MY_DATABASE_NAME = "datenbank.db";
public final static String MY_DATABASE_TABLE = "tabelletab";

try {
myDB = this.openOrCreateDatabase(MY_DATABASE_NAME, MODE_WORLD_WRITEABLE, null);

myDB.execSQL("CREATE TABLE IF NOT EXISTS " + MY_DATABASE_TABLE + "Spalte1 integer primary key, Spalte2 varchar(50), Spalte3 blob, Spalte4 text;");
myDB.execSQL(("INSERT INTO " + MY_DATABASE_TABLE + " (Spalte1, Spalte2 )" + " VALUES ('1', 'WertFuer1');"));
......
....
..

Das komische ist, das nur die Zeilen myDB.execSQL die fehler erzeugen.Wie gesagt, wenn ich die zwei Zeilen auskommentiere gibts es kein Problem. Aber ich kann eben nicht auf die Daten zugreifen :-(

Bin schon am verzweifeln. Bitte helft mir :-((

Gruß
Coder
 
Zuletzt bearbeitet:
wie wär's wenn du mal die fehlermeldung postest? meine glaskugel iss grad defekt... ;)

und da ich selbst anfänger bin iss der codeschnipsel für mich ohnehin etwas unklar. haste ne separate dbhelper.java oder ist alles im im "hauptprogramm"?
 
DalvikCoder schrieb:
[...]
myDB.execSQL("CREATE TABLE IF NOT EXISTS " + MY_DATABASE_TABLE + "Spalte1 integer primary key, Spalte2 varchar(50), Spalte3 blob, Spalte4 text;");
myDB.execSQL(("INSERT INTO " + MY_DATABASE_TABLE + " (Spalte1, Spalte2 )" + " VALUES ('1', 'WertFuer1');"));
[...]
Gruß
Coder

Ich würde sagen dass man die 1 nicht in ' setzt, da es sich um ein integer Feld handelt?
 
Hi szallah,

also eine Fehlermeldung von Eclipse gibt es in dem Fall gar nicht. Sondern im Virtual-Device erscheint "Die Anwendung blablabla (Prozess de.org.myk) wurde unerwartet beendet. Versuchen sie es erneut"

Ich bin auch noch ein neuling was java betrifft. Was meinst du mit dbhelper.java

Der gesamte Quelltext ist im moment noch in einer Datei. Ich wollte erstmal ertasten wie ich einen zugriff auf eine Datenbank realisieren kann.

Irgendwie habe ich kein tutorial gefunden aus dem ich wirklich schlau wurde. Ich weiß z.B. auch nicht wie ich die Datenbank mitgeben kann.

Viele offene Fragen, ich vermute aber das es daran liegt das ich mich mit Java nicht so gut auskenne. Wobei ich die Meinung vertrete kann ich eine Sprache programmieren ist die andere auch nicht so schwer zu lernen.

Kannst du mir das mit der dbhelper.java noch mal erklären?

Gruß
Dalvik
 
@DalvikCoder

heute abend nach der arbeit sag ich mehr zur DBHelper... spontan aber noch folgendes:
beim create-table-statemente fehlt ein leerzeichen, weshalb die tabelle die du erzeugst "tabelletabSpalte1" heißt. demnach kann im zweiten statement auch nicht auf "tabelletab" zugegriffen werden, denn das existiert ja noch garnicht.

und:
natürlich gibt es ne fehlermeldung. du weiß nur nicht wo so wie's aussieht. in eclipse gibt's oben in diesem navi-ding den DDMS-knopf. dort iss n großes fenster wo alles protokolliert wird. da stehen auch fehlermeldungen drin.
steht da nix brauchbares kannste auch noch mit der Log-Klasse selbst fehler ausgeben.
aber dazu mehr heute abend... ;)
 
Ich habe dir mal den Originalcode per pm geschickt. Ich vermute, wie ich auch geschrieben habe, das ich gar keine DB offen habe bzw. kein Zugriff darauf habe.
Na dann gedulde ich mich mal bis heut Abend. Danke für deine Hilfe!

Gruß
Murat
 
@Fr4gg0r

bis dahin komm ich ja nicht mal. Schon die CREATETABLE Direktive funzt nicht :confused:
 
DalvikCoder schrieb:
Hi szallah,

also eine Fehlermeldung von Eclipse gibt es in dem Fall gar nicht.

es gibt immer eine fehlermeldung im eclipse

wurde schon 100 mal durchgekaut

klick auf die debug view im eclipse dann siehst du den logcat mit allen exceptions die da auftreten. dann wirst du den fehler entweder sehr schnell selbst finden oder du kopierst die roten zeilen hier rein
 
Jetzt habe ichs! Dank an Fr4gg0r,

im DDMS steht folgendes


01-22 14:41:37.505: ERROR/AndroidRuntime(254): at android.os.Handler.dispatchMessage(Handler.java:99)
01-22 14:41:37.505: ERROR/AndroidRuntime(254): at android.os.Looper.loop(Looper.java:123)
01-22 14:41:37.505: ERROR/AndroidRuntime(254): at android.app.ActivityThread.main(ActivityThread.java:4203)
01-22 14:41:37.505: ERROR/AndroidRuntime(254): at java.lang.reflect.Method.invokeNative(Native Method)
01-22 14:41:37.505: ERROR/AndroidRuntime(254): at java.lang.reflect.Method.invoke(Method.java:521)
01-22 14:41:37.505: ERROR/AndroidRuntime(254): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
01-22 14:41:37.505: ERROR/AndroidRuntime(254): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
01-22 14:41:37.505: ERROR/AndroidRuntime(254): at dalvik.system.NativeStart.main(Native Method)
01-22 14:41:37.505: ERROR/AndroidRuntime(254): Caused by: android.database.sqlite.SQLiteException: near "No": syntax error: CREATE TABLE IF NOT EXISTS Sureler No integer primary key, SureIsim varchar(50), Arabca blob, TuerkceAnlam text;
01-22 14:41:37.505: ERROR/AndroidRuntime(254): at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method)
01-22 14:41:37.505: ERROR/AndroidRuntime(254): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1497)
01-22 14:41:37.505: ERROR/AndroidRuntime(254): at de.org.myk.main.onCreate(main.java:32)
01-22 14:41:37.505: ERROR/AndroidRuntime(254): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
01-22 14:41:37.505: ERROR/AndroidRuntime(254): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
01-22 14:41:37.505: ERROR/AndroidRuntime(254): ... 11 more
 
ich bin zwar immer noch auf der arbeit, aber mach's doch einfach mal schritt für schritt.
anstatt beim create table anzugeben welcher dateityp reinkommt kannste einfach die spalten als solche anlegen. sqlite kann das von sich aus dynamisch verwalten und sucht den besten datentyp selbst wenn nix entsprechendes angegeben ist.
man kann kein sql wie bei mysql verwenden. zumindest nicht immer. probier's also mal ohne die datentyp-angabe.

PS:
was soll "No integer primary key" machen? darauf verweist ja die fehlermeldung...
ich würd' mal tippen das soll eigentlich "integer not null primary key autoincrement" heißen...
 
Zuletzt bearbeitet:
Was mir gestern aufgefallen ist ( meine Datenbank funktioniert jetzt endlich :)):
Beim Installieren einer neuen Version wird die alte Datenbank nicht gelöscht, in meinem Fall war das so, dass ich später noch eine Spalte einfügen wollte und das führt dann zu Errors wenn man auf diese Verweist ( Query z.B.).
 
du musst vorher die app komplett löschen

bei einem update deiner app musst die dbVersion überpfrüfen und damit arbeiten, wenn sich an der db selbst etwas ändert
 
@Fr4gg0r

und woran lag's?
 
Fehler im Query bzw. beim Verarbeiten des Cursors.
Läuft deiner jetzt?
Sonst kopier dein SQLite relevanten Code doch in Pastebin und wir schauen uns den
mal an.
 
@Fr4gg0r

ich bin nicht der threaderöffner... meine datenbank schnurrt wie ein kätzchen... :D
 
Hi,

danke noch mal an alle für die Unterstützung. Ich habe das Problem mittlerweile lösen können.

Ich will es mal so sagen es war einfach ein Syntax-Problem. Funktioniert einwandfrei.


P.S. Das No in No Integer Primary Key ist der Name der Spalte ;-)
 

Ähnliche Themen

S
Antworten
33
Aufrufe
2.540
Sempervivum
S
S
Antworten
3
Aufrufe
833
jogimuc
J
Zurück
Oben Unten