直接判断:
/**
* @brief 查询sqlite数据库中的指定表格是否存在
* @param pSqlite3DB 已经打开的sqlite数据库对象
* @param pszTableName 要查询的表格名
* @return 表格存在返回true,参数错误或表格不存在返回false,在返回错误时请查阅日志。
* @code
* //...
* assert( DoesTableExist(pDB, "task") ); //查询pDB指定的库中是否存在task表格
* //...
*/
bool DoesTableExist( sqlite3* pSqlite3DB, const char* pszTableName )
{
assert( pSqlite3DB );
assert( pszTableName );
if( !pSqlite3DB || !pszTableName )
{
Log("IsTableExist function failed: some params are null");
return false;
}
char szSql[256] = {0};
sprintf(szSql, "SELECT COUNT(*) FROM sqlite_master "
"where type='table' and name=\'%s\'", pszTableName );
char** pszResult(NULL);
int nRow(0),nColumn(0);
int nResult = sqlite3_get_table( pSqlite3DB, szSql, &pszResult,&nRow,&nColumn,NULL);
if( (nResult != SQLITE_OK) )
{
sqlite3_free_table(pszResult);
Log("sql error when query table existence:%s", sqlite3_errstr(nResult) );
return false;
}
if( nRow == 0 )
{
// 查询成功,但是不存在
sqlite3_free_table(pszResult);
return false;
}
// 第0行是表头
// 第1行是查询结果
if( pResult[1][0] != '1' )
{
Log("query result not acceptable:%s", pResult[1] );
return false;
}
return true;
}