为了方便项目的跨平台,在选用数据库时选择了轻量级的跨平台数据库--sqlite
在使用过程中,将常用接口封装了一下,使代码相对简洁,使用起来也相对方便。
目前封装了两个接口:
一:封装了sqlite3_exec接口
int HomeDatabase::callMySql(sqlite3 *sqlFd, const char *sql)
{
/** 检查输入参数是否为有效参数 */
ISNULL(sqlFd);
ISNULL(sql);
/** 操作前先清空错误信息 */
zErrMsg = NULL;
/** 运行传入的SQL语句 */
sqlite3_exec(sqlFd, sql, 0, 0, &zErrMsg );
if(zErrMsg == NULL)
{
printf("Call SQL Ok!\n");
}
else
{
printf("Call SQL ERROR: %s\n", sql);
printf("%s\n", zErrMsg);
return -2;
}
return 0;
}
二:封装了sqlite3_get_table接口
int HomeDatabase::callMySql(sqlite3 *sqlFd, const char *sql)
{
/** 检查输入参数是否为有效参数 */
ISNULL(sqlFd);
ISNULL(sql);
/** 操作前先清空错误信息 */
zErrMsg = NULL;
/** 运行传入的SQL语句 */
sqlite3_exec(sqlFd, sql, 0, 0, &zErrMsg );
if(zErrMsg == NULL)
{
printf("Call SQL Ok!\n");
}
else
{
printf("Call SQL ERROR: %s\n", sql);
printf("%s\n", zErrMsg);
return -2;
}
return 0;
}
封装接口主要是为了在大量地方调用时,免去到处判断类型及错误,使代码更简洁
在检查参数时,引入了宏函数ISNULL()
/** 宏函数,用来判断是否为NULL */
#define ISNULL(x) \
do{\
if((x) == NULL)\
{\
printf("Invalid parameter: NULL\n");\
return -1;\
}\
}while(0)
宏函数一般使用do{}while包含起来