gpt4 book ai didi

mysql - 对于空值,SQlite select 返回 "(null)"而不是 ""

转载 作者:太空宇宙 更新时间:2023-11-04 10:43:52 26 4
gpt4 key购买 nike

我在 Linux 中编写了一个 C 程序,它读取本地 Sqlite3 数据库以更新远程 MySQL 数据库。当 Sqlite 表中的可选字段为空时,我在进行选择时得到字符串“(null)”。这以远程 MySQL 数据库中的大量“(null)”字符串结尾。

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

编辑:

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

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

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;

最佳答案

使用 snprintf 以这种方式编写 SQL 查询是不好的,不仅因为空值,还因为您可能会遇到 all kinds of trouble因为你没有逃避你的字符串。

我建议使用 prepared statements API反而。当您使用它时,在 C 级别,您必须根据给定值是否为 NULL 明确设置一些 is_bool 标志。

关于mysql - 对于空值,SQlite select 返回 "(null)"而不是 "",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33899157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com