使用sqlite查询时, 注意返回结果为NULL的清空, 使用sqlite3_column_type() 来判断
实例:
/*
Brief: 查询只有一条记录的string
*/
int oper_data_select_str(sqlite3 *db, char *sql_cmd, char *out_str, int len)
{
int rc;
sqlite3_stmt* stmt = NULL;
printf("%s: sql_cmd is \"%s\"\n", __func__, sql_cmd);
if (NULL == db || NULL == sql_cmd || NULL == out_str)
return -1;
printf("---%s come\n", __func__);
if ( (rc = sqlite3_prepare_v2(db, sql_cmd, strlen(sql_cmd), &stmt, NULL) ) != SQLITE_OK) {
printf("---%s come 1\n", __func__);
if (stmt)
sqlite3_finalize(stmt);
printf("sqlite3 prepare return error:%d\n", rc);
return rc;
}
printf("---%s come 2\n", __func__);
printf("---%s stmt is in %p\n", __func__, stmt);
do {
const char* str = NULL;
printf("---%s come 3\n", __func__);
rc = sqlite3_step(stmt);
printf("---%s come 4\n", __func__);
if (rc == SQLITE_ROW)
{
printf("---%s come 5\n", __func__);
if (sqlite3_column_type(stmt, 0) != SQLITE_NULL)
{
str = sqlite3_column_text(stmt, 0);
printf("%s select res is \"%s\" \n", __func__, str);
if (strlen(str))
{
strncpy(out_str, str, len);
out_str[len - 1] = '\0';
}
}
else
{
printf("%s select res is NULL \n", __func__);
}
}
else if (rc == SQLITE_DONE)
{
//printf("Select Finished.\n");
sqlite3_finalize(stmt);
break;
}
else
{
printf("Failed to SELECT.\n");
sqlite3_finalize(stmt);
return rc;
}
} while (true);
printf("---%s finish\n", __func__);
return SQLITE_OK;
}