本文基于无幻写的VC连接SQLite3的方法(MFC封装类) 在此基础上增加对数据库中表是否存在的判断,自己愚见,仅供参考。阅读此为前最好先阅读VC连接SQLite3的方法(MFC封装类),不然会不知所以然。不说什么,直接上代码:
网上说判断SQLite判断表存在的方法是使用sql语句:
SELECT COUNT(*) as CNT FROM sqlite_master where type='table' and name='DBInfo' //其中DBInfo为需要判断的表名
但在这由于MFC对SQLite3的封装,所以,试了多次而不得,这是我的解决方案:自己写封装函数:
在DBSqlite.h中:
class CsqlStatement类中添加:
BOOLResultStep();
Class CDbSQLite类中添加:
BOOLExcuteResult(LPCSTR stmt);
在DBSqlite.cpp中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
BOOL CSqlStatement::ResultStep() { //return _sqlite3_column_count(m_stmt); if (NULL == m_stmt) { return FALSE; } return TRUE; } BOOL CDbSQLite::ExcuteResult(LPCTSTR stmt) // 获得返回结果值 { CSqlStatement* pStatement = this->Statement(stmt); BOOL fResult = pStatement->ResultStep(); delete pStatement; return fResult; } |
C++ Code 判断表是否存在代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
数据库操作// BOOL flag; CDbSQLite sqlite; //连接打开SQLite数据库(创建或打开) flag = sqlite.Open(_T("downloadinfo.db")); if (!flag) { AfxMessageBox(_T("打不开downloadinfo.db")); return FALSE; } flag = sqlite.ExcuteResult(_T("SELECT * FROM downcfg")); if (!flag) {// 表不存在 // 创建表 flag = sqlite.DirectStatement( _T("CREATE TABLE downcfg(cfgfile varchar(50), downlink varchar(300))") ); } / |
自己愚见,这里仅作记录。