如何在SQLite中检查表是否存在?

我如何可靠地检查SQLite中是否存在特定的用户表?

我并不是要求不可靠的方法来检查表上的“select *”是否返回错误(这是个好主意吗?)。

原因是这样的:

在我的程序中,如果它们不存在,我需要创建并填充一些表。

如果它们已经存在,我需要更新一些表格。

我是否应该采取一些其他的途径来表示已经创建了相关表格 - 例如,通过在我的程序初始化/设置文件中创建/放置/设置某个标记在磁盘上或其他东西?

或者我的方法是否有意义?


我错过了那个FAQ条目。

无论如何,为了将来的参考,完整的查询是:

SELECT name FROM sqlite_master WHERE type='table' AND name='{table_name}';

其中{table_name}是要检查的表的名称。

文档部分以供参考:数据库文件格式。 2.6。 存储SQL数据库模式


如果您使用的是SQLite版本3.3+,则可以使用以下方式轻松创建表格:

create table if not exists TableName (col1 typ1, ..., colN typN)

以同样的方式,只有通过使用以下内容才能删除表:

drop table if exists TableName

一种变化是使用SELECT COUNT(*)而不是SELECT NAME,即

SELECT count(*) FROM sqlite_master WHERE type='table' AND name='table_name';

这将返回0,如果表不存在,则返回1。 这对您的编程可能很有用,因为数值结果更快/更容易处理。 以下说明了如何在Android中使用带参数的SQLiteDatabase,Cursor和rawQuery执行此操作。

boolean tableExists(SQLiteDatabase db, String tableName)
{
    if (tableName == null || db == null || !db.isOpen())
    {
        return false;
    }
    Cursor cursor = db.rawQuery("SELECT COUNT(*) FROM sqlite_master WHERE type = ? AND name = ?", new String[] {"table", tableName});
    if (!cursor.moveToFirst())
    {
        cursor.close();
        return false;
    }
    int count = cursor.getInt(0);
    cursor.close();
    return count > 0;
}
链接地址: http://www.djcxy.com/p/3337.html

上一篇: How do I check in SQLite whether a table exists?

下一篇: UPSERT *not* INSERT or REPLACE