c++中如何判断sqlite表是否存在
2019-10-25 06:25:11来源:博客园 阅读 ()
c++中如何判断sqlite表是否存在
在项目中遇到需要判断sqlite数据库中某个表是否存在,上网搜索一些资料后,解决了问题,如下:
首先,在每个sqlite数据库中,都有一个名为sqlite_master的表,它定义了数据库的模式,它的结构如下:
sqlite_master (
type TEXT, //项目的类型,如table、index、view、trigger
name TEXT, //项目的名称,如表名、索引名等
tbl_name TEXT, //所从属的表名,如索引所在的表名。对于表来说,该列就是表名本身
rootpage INTEGER, //项目在数据库页中存储的编号。对于视图和触发器,该列值为0或者NULL
sql TEXT //创建该项目的SQL语句
);
这个表中记录了数据库中的相关信息,我们通过在这个表中查找我们需要判断的表来判断其是否存在。相关代码如下:
char strFindTable[128];
sprintf_s(strFindTable, "SELECT * FROM where type ='table' and name ='%s'", tabletname); //tablename为表名
sqlite3_stmt* stmt0 = NULL;
if (sqlite3_prepare_v2(conn, strFindTable, strlen(strFindTable), &stmt0, NULL) != SQLITE_OK) {
if (stmt0)
sqlite3_finalize(stmt0);
sqlite3_close(conn);
cout << "语句初始化错误";
return;
}
int r = sqlite3_step(stmt0);
//判断表存在,结果集是否已到末尾
//通过sqlite3_step命令执行创建表的语句。对于DDL和DML语句而言, sqlite3_step执行正确的返回值
//只有SQLITE_DONE,对于SELECT查询而言,如果有数据返回SQLITE_ROW,当到达结果集末尾时则返回SQLITE_DONE。
if (r == SQLITE_DONE){
cout<<"table doesn't existed";
}
else if (r == SQLITE_ROW){
cout<<"table had existed";
}
这里要注意的是,当sqlite_master表中没有我们查询的表示,它返回的结果集并不会为空,它先返回表项,所以需要使用sqlite3_step。该函数用于评估sqlite3_prepare函数返回的prepared_statement对象,在执行完该函数之后,prepared_statement对象的内部指针将指向其返回的结果集的第一行。如果打算进一步迭代其后的数据行就需要不断的调用该函数,直到所有的数据行都遍历完毕。在这里,使用了sqlite3_step之后,如果返回的是SQLITE_DONE,就说明结果集到了末尾,也就是说没有找到我们判断存在与否的表,即表不存在;如果返回的是SQLITE_ROW,说明在sqlite_master中找到了表相关的信息,即表存在。
原文链接:https://www.cnblogs.com/honernan/p/11714804.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++ 转换函数搭配友元函数 2020-06-10
- C++ 自动转换和强制类型转换(用户自定义类类型) 2020-06-10
- C++ rand函数 2020-06-10
- C++ 友元函数 2020-06-10
- C++ 运算符重载 2020-06-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash