Android:sqlite - 没有这样的表异常

时间:2011-09-13 11:45:00

标签: android sqlite

我有以下代码(我简化了它并删除了不相关的部分)

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。有什么想法吗?

4 个答案:

答案 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(); 下移动它并且它有效。

感谢所有人的帮助。