检查CREATE TABLE是否实际创建了表或它是否已存在?

时间:2012-03-19 08:03:05

标签: c sqlite

我在SQLite中创建表,而不是每次都检查它是否存在。

sqlite3_stmt* create_stmt = NULL;
if (sqlite3_prepare_v2(db, "CREATE TABLE mytable (sif INTEGER PRIMARY KEY, name VARCHAR, description VARCHAR);", -1, &create_stmt, NULL) == SQLITE_OK)
{
    sqlite3_step(create_stmt);
    sqlite3_finalize(create_stmt);
}

如果该表不存在,则会创建该表;如果它存在,没有任何反应。

我想知道是否有某种方法可以获取有关表是创建还是仅检查的信息?

3 个答案:

答案 0 :(得分:3)

我不确定您是否仍在寻找答案,但如果该表已经存在,那么sqlite3_finalize将返回非零(不是SQLITE_OK)值。

答案 1 :(得分:2)

在sqlite3:describe table中等同于mysql' s .schema TABLENAME。有关详情,请参阅this question

因此,您可以发出.schema mytable以了解它是否已创建以及它的外观。为了更专注于单个表,您可以also use声明:

select count(type) from sqlite_master where type='table' and name='TABLE_NAME_TO_CHECK';

答案 2 :(得分:1)

如果我没记错的话,如果你的表已经存在,那么sqlite3_step()会失败,而不是sqlite3_prepare_v2。检查结果也是如此 编辑:除此之外,你应该一直检查它,以捕获损坏的数据库或其他错误条件;)