No such Table found! - dann erstell doch eine!

  • Antworten:8
L3322
  • Forum-Beiträge: 467

30.08.2010, 13:23:22 via Website

Ich entwickle an einem Spiel dass wohl bald in die beta-Phase kommt und bereit ist veröffentlicht zu werden!
ich habe eine Datenbank erstellt und mein Punkte wurden schön brav gespeichert, doch irgentwann bekam ich einen Force close und meine Liebe Logcat spuckte mir folgendes aus:

108-30 13:09:35.475: ERROR/Database(9173): Failure 1 (no such table: Scores) on 0x2eaaf0 when preparing 'INSERT INTO Scores (name, score) VALUES ('leon','404');'.
208-30 13:09:35.475: ERROR/AndroidRuntime(9173): FATAL EXCEPTION: main
308-30 13:09:35.475: ERROR/AndroidRuntime(9173): android.database.sqlite.SQLiteException: no such table: Scores: INSERT INTO Scores (name, score) VALUES ('leon','404');
408-30 13:09:35.475: ERROR/AndroidRuntime(9173): at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method)
508-30 13:09:35.475: ERROR/AndroidRuntime(9173): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1814)
608-30 13:09:35.475: ERROR/AndroidRuntime(9173): at com.shitbox.dblaster.dGame.InsertToDB(dGame.java:906)
708-30 13:09:35.475: ERROR/AndroidRuntime(9173): at com.shitbox.dblaster.dGame$1.onClick(dGame.java:896)
808-30 13:09:35.475: ERROR/AndroidRuntime(9173): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158)
908-30 13:09:35.475: ERROR/AndroidRuntime(9173): at android.os.Handler.dispatchMessage(Handler.java:99)
1008-30 13:09:35.475: ERROR/AndroidRuntime(9173): at android.os.Looper.loop(Looper.java:144)
1108-30 13:09:35.475: ERROR/AndroidRuntime(9173): at android.app.ActivityThread.main(ActivityThread.java:4937)
1208-30 13:09:35.475: ERROR/AndroidRuntime(9173): at java.lang.reflect.Method.invokeNative(Native Method)
1308-30 13:09:35.475: ERROR/AndroidRuntime(9173): at java.lang.reflect.Method.invoke(Method.java:521)
1408-30 13:09:35.475: ERROR/AndroidRuntime(9173): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
1508-30 13:09:35.475: ERROR/AndroidRuntime(9173): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
1608-30 13:09:35.475: ERROR/AndroidRuntime(9173): at dalvik.system.NativeStart.main(Native Method)

Merkwürdig denke ich mir es heißt ja openOrCreate
aber es kann keine table gefunden werden und am Code habe ich auch nichts geändert
1private void erstelleDBUndDBTabled()
2 {
3 myDB = mContext.openOrCreateDatabase(MY_DATABASE_NAME, Context.MODE_PRIVATE, null);
4 myDB.execSQL("CREATE TABLE IF NOT EXISTS " + MY_DATABASE_TABLE
5 + " (_id integer primary key autoincrement, name varchar(100), score varchar(100))"
6 +";");
7 }

1InsertToDB(Name.getText().toString(), Score.getText().toString());

1public void InsertToDB(String Name, String Score)
2 {
3 SQLiteDatabase myDB = null;
4 try {
5 myDB = mContext.openOrCreateDatabase(ColorBlasterGame.MY_DATABASE_NAME, Context.MODE_PRIVATE, null);
6 myDB.execSQL("INSERT INTO "+ColorBlasterGame.MY_DATABASE_TABLE+" (name, score) "
7 +"VALUES ('"+Name+"','"+Score+"');");
8 }
9 finally
10 {
11 if (myDB != null)
12 myDB.close();
13 }
14 }
Ich seh ja nix was da falsch wäre!

Danke an den der es erkennt und an alle die es versuchen

Ps:Nicht so streng ich bin der Neue

"Hard work beats talent, when talent fails to work hard"

Antworten
L3322
  • Forum-Beiträge: 467

05.09.2010, 20:18:43 via App

nobody?
ich habe nichts falschgemacht eigentlich

"Hard work beats talent, when talent fails to work hard"

Antworten
L3322
  • Forum-Beiträge: 467

05.09.2010, 22:48:04 via App

okay dank root habe ich auf meinem Handy die Datenbank besteht aber die Tabelle nicht aber die müsste doch durch das oncreate auch erstellt werden !

jetzt was?

"Hard work beats talent, when talent fails to work hard"

Antworten
Gelöschter Account
  • Admin
  • Forum-Beiträge: 3.718

05.09.2010, 23:06:27 via Website

Hallo L3322,

das pushen deines Eintrags bring dir hier gar nichts.
Wenn es ein Entwickler ließt wird er dir helfen.

Bitte unterlasse das pushen!

Gruß Manfred

Antworten
L3322
  • Forum-Beiträge: 467

05.09.2010, 23:37:12 via App

sorry bin neu!
ich werde es in Zukunft unterlassen

lg l3322

"Hard work beats talent, when talent fails to work hard"

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

06.09.2010, 12:27:26 via Website

Mein Tip: SQLiteManager installieren (Firefox) die DB runterladen und schritt für schritt mal nachprüfen ob dein Code überhaupt richtig durchlaufen wird.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
L3322
  • Forum-Beiträge: 467

06.09.2010, 13:52:30 via App

okay ich habe es jetzt anders gelöst die Datenbank wird schon im Menü d.h. ganz am Anfang des Spiels erstellt! (und da geht es warum auch immer) und in der anderen activity verwende ich halt dann das insert into...

danke

"Hard work beats talent, when talent fails to work hard"

Antworten
L3322
  • Forum-Beiträge: 467

06.09.2010, 13:52:59 via App

okay ich habe es jetzt anders gelöst die Datenbank wird schon im Menü d.h. ganz am Anfang des Spiels erstellt! (und da geht es warum auch immer) und in der anderen activity verwende ich halt dann das insert into...

danke

"Hard work beats talent, when talent fails to work hard"

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

06.09.2010, 15:33:59 via Website

Ich weiß zwar das in jeden Android Buch die Tables irgendwo wild erzeugt werden aber so ist das wohl leider nun mal. Dabei stellt das SDK Klassen bereit die einem das Leben deutlich vereinfachen:
1/**
2 * Creates or updates the underlying SQLite Database.
3 *
4 * @author mac
5 * @version $Id: Database.java 545 2010-07-17 13:48:52Z mac $
6 *
7 */
8public final class Database extends SQLiteOpenHelper
9{
10
11 private final static String LOG_TAG = Database.class.getSimpleName();
12
13 private final static String DATABASE_NAME = "datenbankname.db";
14
15 private final static int VERSION = 3;
16
17 private final Context context;
18
19 /**
20 *
21 * @param _context
22 */
23 public Database(final Context _context)
24 {
25 super(_context, DATABASE_NAME, null, VERSION);
26 context = _context;
27 }
28
29 /*
30 * (non-Javadoc)
31 *
32 * @see
33 * android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite
34 * .SQLiteDatabase)
35 */
36 @Override
37 public void onCreate(final SQLiteDatabase database)
38 {
39 if (Logging.isEnabled)
40 {
41 Log.d(LOG_TAG, "onCreate Database");
42 }
43
44 ... hier erzeugst du erstmalig die DB
45
46 }
47
48
49
50 /*
51 * (non-Javadoc)
52 *
53 * @see
54 * android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite
55 * .SQLiteDatabase, int, int)
56 */
57 @Override
58 public void onUpgrade(final SQLiteDatabase database, final int oldVersion, final int newVersion)
59 {
60 if (Logging.isEnabled)
61 {
62 Log.d(LOG_TAG, "Upgrade Database from version " + oldVersion + " to " + newVersion);
63 }
64
65
66 // wird durchlaufen wenn die Versionsnummer geändert wurde
67
68 }

Das heißt in der Activity die in der XML als Main deklariert wurde erzeugst du einfach eine Instanz dieser Klasse, fertig!
Den zugriff selbst würde Ich ebenfalls in Methoden auslagern damit das ganze ein wenig Struktur bekommt!


- Mac

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten