SQLite判断表存在的方法——我的解决方案(MFC)

来源:互联网 发布:js div style display 编辑:程序博客网 时间:2024/06/05 17:12

本文基于无幻写的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))")
                        );
    }
/////////////////////////////////////////////////////////////////////

自己愚见,这里仅作记录。