我有以下代码(我简化了它并删除了不相关的部分)
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
。有什么想法吗?
答案 0 :(得分:2)
Sqlite没有DATE的数据类型。我建议将其更改为INTEGER并在其中存储date.getTime()。
答案 1 :(得分:1)
更改您的查询并尝试以下内容:
create table t1 (_id INTEGER PRIMARY KEY AUTOINCREMENT, data TEXT,num REAL,timeEnter NUMERIC);
Android Sqlite数据库表中应该有一列_id
,最好是autoincrement
。
答案 2 :(得分:1)
尝试通过更改构造函数来实例化管理器时尝试传递上下文:
public MyDatabaseManager(Context ctx) {
super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
}
public openDB() throws SQLException
{
myDatabase = getWritableDatabase;
}
现在将getApplicationContext()传递给活动的onCreate()中的新MyDatabaseManager实例:
MyDatabaseManager manager = new MyDataBaseManager(getApplicationContext());
manager.openDB();
答案 3 :(得分:0)
好的,我解决了这个问题。存在多个问题:
1)我的创建表查询有问题
2)我在onCreate
的末尾以编程方式将数据库文件复制到SD卡,显然还没有写入。我在myDatabase = getWritableDatabase();
下移动它并且它有效。
感谢所有人的帮助。