2014-01-08 2 views
-1

У меня есть класс с именем GameDb, и он расширяет SQLiteOpenHelper. Я не знаю почему, но onCreate это не называется, таблица не создана!Таблица SQLiteDatabase Android не существует

Имея singelton для всех моих действий и фрагментов:

public MyApp extends Application 
{ 
    // .... Code 

    private GameDb gameDb; 

    public GameDb getGameDb() 
    { 
     if (gameDb == null) 
     gameDb = new GameDb(this); 

     return this.gameDb; 
    } 
} 

Getting всех игры из базы данных, вызов от деятельности

public class MyActivity extends FragmentActivity 
{ 
    @Override 
    protected void onCreate(Bundle bundle) 
    { 
     // Code.... 

     // Get all games 
     ArrayList<Game> allGames = getMyApp().getGameDb().getAllGames(); 
    } 
} 

класса, который содержит все необходимые методы для запросов к базе данных (запись и чтение). Эти методы не описаны ниже, потому что это не обязательно.

public class GameDb 
{ 
    private SQLiteDatabase db; 
    private GameDbHelper dbHelper; 

    public GameDb(Context context) 
    { 
     this.dbHelper = new GameDbHelper(context); 
     this.db = dbHelper.getWritableDatabase(); 
    } 

    public ArrayList<Games> getAllGames() 
    { 
     // return db.query(....); 
    } 

    public void insertNewGame(int id, String name) 
    { 
     // db.query(....); 
    } 

    // Static inner class which extends SQLiteOpenHelper 
    private static class GameDbHelper extends SQLiteOpenHelper 
    { 
     public GameDbHelper(Context context) 
     { 
     super(context, "DB_NAME", null, 1); 
     } 

     // On create not called ! 
     @Override 
     public void onCreate(SQLiteDatabase db) 
     { 
     db.execSQL("CREATE TABLE my_table(_id INTEGER AUTOINCREMENT, date TEXT);"); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
     { 
     dropTable(db); 
     onCreate(db); 
     } 

     public void dropTable(SQLiteDatabase db) 
     { 
     db.execSQL("DROP TABLE IF EXISTS my_table"); 
     } 
    }  
} 

Когда я пытаюсь получить все игры, или добавить новую игру я получаю фатальную ошибку, (1) нет такой таблицы: my_table

+2

Удалите и переустановите приложение, чтобы удалить все возможные старые файлы базы данных. – laalto

+0

или просто увеличивайте версию db при ее создании. – njzk2

+0

@ njzk2 Правда, хотя я обнаружил, что для начинающих с такими проблемами путь удаления/очистки данных является самым простым во время разработки. Нет необходимости использовать 'onUpgrade()' пути кода еще и упрощает код, не переходя к произвольно большим номерам версий. – laalto

ответ

1

Вы можете иметь старую базу данных представить на ваше устройство и база данных не всегда удаляются при повторной установке приложения с помощью IDE. Таким образом, вы должны удалить приложение вручную и переустановить приложение с помощью IDE.

0

Я не верю, что onCreate() получает неявное обращение при создании объекта базы данных. Вам нужно явно вызвать метод openOrCreateDatabase() вашей активности.

Смежные вопросы