我在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);
}
如果该表不存在,则会创建该表;如果它存在,没有任何反应。
我想知道是否有某种方法可以获取有关表是创建还是仅检查的信息?
答案 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。检查结果也是如此 编辑:除此之外,你应该一直检查它,以捕获损坏的数据库或其他错误条件;)