首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQlite选择返回空值的"(null)“而不是"”

问SQlite选择返回空值的"(null)“而不是"”
EN

Stack Overflow用户
提问于 2015-11-24 16:40:24
回答 1查看 2.2K关注 0票数 0

我在Linux中编写了一个C程序,它读取本地Sqlite3 DB来更新远程MySQL DB。当Sqlite中的可选字段为空时,我在执行select时得到字符串"(null)“。这以远程MySQL数据库中的许多"(null)“字符串结尾。

当表的字段为空时,Sqlite3中是否有任何获得空字符串的标志或配置选项?

编辑:

作为CL。在构建sql_query时,提到的是snprintf函数,它为NULL值创建了"(null)“字符串。这不是我想要的,所以我想我必须检查每个值,看看它是否为空?有更好的办法吗?在这个例子中,这并不重要,但在真正的例子中,有很多字段。

示例代码:这是在sqlite之后执行的回调函数,然后我用获得的数据构建一个sql查询,以更新远程MySQL:

代码语言:javascript
复制
static int callback_sync_Table(void *NotUsed, int argc, char **argv, char **azColName){

int rc;
char *zErrMsg = NULL;
char sql_query[512];

memset(sql_query, '\0', sizeof(sql_query));
snprintf(sql_query, sizeof(sql_query)-1, "INSERT INTO table(field_1,field_2,field_3) VALUES("
         "\"%s\",\"%s\",\"%s\") ON DUPLICATE KEY UPDATE "
         "field_1=\"%s\",field_2=\"%s\",field_3=\"%s\";",
         argv[0], argv[1], argv[2],
         argv[0], argv[1], argv[2],);

if(mysql_query(mysql_db_conn, sql_query)){
    fprintf(stderr, "MySQL error: %s\n", mysql_error(mysql_db_conn));
    syslog(LOG_DEBUG, "MySQL error: %s", mysql_error(mysql_db_conn));
}
return 0;

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-24 21:28:54

以这种方式使用snprintf编写SQL查询是不好的,这不仅是因为空值,而且还因为您没有转义字符串这一事实可能会遇到各种麻烦。

我建议使用准备报表API代替。当您使用它时,在C级别上,您必须根据给定的值是否为is_bool,明确地设置一些NULL标志。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33899157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档