首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何检查表是否存在于Android SQLite数据库中?

如何检查表是否存在于Android SQLite数据库中?
EN

Stack Overflow用户
提问于 2010-06-17 12:40:07
回答 13查看 125.7K关注 0票数 93

我有一个android应用程序,它需要检查数据库中是否已经有记录,如果没有,则处理一些事情并最终插入它,如果数据确实存在,则简单地从数据库中读取数据。我使用SQLiteOpenHelper的一个子类来创建和获取SQLiteDatabase的一个可重写实例,我认为如果表不存在,它会自动创建该表(因为执行此操作的代码在onCreate(...)中)方法)。

但是,当表还不存在时,并且在我拥有的SQLiteDatabase对象上运行的第一个方法是调用query(...),我的logcat显示一个错误"I/Database(26434):sqlite returned: error code = 1,msg = no the table: appdata",果然,appdata表没有被创建。

你知道为什么吗?

我正在寻找一种方法来测试表是否存在(因为如果它不存在,数据肯定不在其中,并且我不需要读取它,直到我写入它,这似乎可以正确地创建表),或者寻找一种方法来确保它被创建,并且只是空的,以便第一次调用query(...)

编辑

这是在以下两个答案之后发布的:

我想我可能找到问题所在了。出于某种原因,我决定为每个表创建一个不同的SQLiteOpenHelper,即使两者访问相同的数据库文件。我认为将代码重构为只使用一个OpenHelper,并在它的onCreate中创建两个表可能会更好……

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2010-06-18 02:11:09

是的,事实证明我编辑的理论是正确的:导致onCreate方法不能运行的问题是SQLiteOpenHelper对象应该引用数据库,而不是每个表都有一个单独的数据库。将两个表打包到一个SQLiteOpenHelper中就解决了这个问题。

票数 8
EN

Stack Overflow用户

发布于 2011-10-23 07:52:03

试试这个:

代码语言:javascript
复制
public boolean isTableExists(String tableName, boolean openDb) {
    if(openDb) {
        if(mDatabase == null || !mDatabase.isOpen()) {
            mDatabase = getReadableDatabase();
        }

        if(!mDatabase.isReadOnly()) {
            mDatabase.close();
            mDatabase = getReadableDatabase();
        }
    }

    String query = "select DISTINCT tbl_name from sqlite_master where tbl_name = '"+tableName+"'";
    try (Cursor cursor = mDatabase.rawQuery(query, null)) {
        if(cursor!=null) {
            if(cursor.getCount()>0) {
                return true;
            }
        }
        return false;
    }
}
票数 131
EN

Stack Overflow用户

发布于 2010-06-17 12:47:53

我对安卓SQL一无所知,但如果你能够直接用SQLite与它对话,你可以这样做:

代码语言:javascript
复制
create table if not exists mytable (col1 type, col2 type);

这将确保始终创建表,并且如果表已经存在,则不会抛出任何错误。

票数 52
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3058909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档