У меня есть класс с именем 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
Удалите и переустановите приложение, чтобы удалить все возможные старые файлы базы данных. – laalto
или просто увеличивайте версию db при ее создании. – njzk2
@ njzk2 Правда, хотя я обнаружил, что для начинающих с такими проблемами путь удаления/очистки данных является самым простым во время разработки. Нет необходимости использовать 'onUpgrade()' пути кода еще и упрощает код, не переходя к произвольно большим номерам версий. – laalto