【发布时间】:2012-10-05 09:57:04
【问题描述】:
我有以下代码(我对其进行了简化并删除了不相关的部分)
public class MyDatabaseManager extends SQLiteOpenHelper {
private SQLiteDatabase myDatabase;
public DatabaseManager() {
super(MyApp.getAndroidContext(), DATABASE_NAME, null, DATABASE_VERSION);
myDatabase = getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase database) {
database.execSQL("create table t1 (t1key INTEGER PRIMARY KEY,data TEXT,num REAL,timeEnter NUMERIC);");
}
@Override
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
}
}
现在,当我对该数据库运行查询时,我得到sqlite - no such table exception。
我在database.execSQL 的断点命中并且它没有引发任何异常(例如,如果我将代码更改为database.execSQL("asda") 我得到语法错误异常)所以我认为我的SQL 代码是正确的。然而该表并未创建。
我将数据库文件复制到我的电脑上,然后用 Sqlite 浏览器查看了它,确实我的表不存在那里。只有一张桌子,叫做android_metadata。有什么想法吗?
【问题讨论】:
-
您需要在创建和实例化 MyDatabaseManager 对象的位置放置代码。这通常是由于上下文变化而发生的。
-
那里没有太多有趣的东西,我通过使用
getApplicationContext()了解上下文 -
您使用的超级调用是什么?您已将其注释掉...
-
好的,我把它放在那里。
MyApp.getAndroidContext()只返回private static android.content.Context m_Context;,它在MyApp.onCreate()内初始化,代码为m_Context = getApplicationContext();