【发布时间】:2016-02-27 05:15:09
【问题描述】:
我在 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;
}
【问题讨论】:
-
NULL和空字符串''不是一回事。如果您一开始就不想在数据库中出现空值,请将NOT NULL约束添加到您的 SQLite 列,并且首先不要插入它们。 -
数据库不会为 NULL 值生成字符串
(null)。但是,printf()函数对 NULL 指针执行此操作。显示您的代码! -
对,你是对的,当然是snprintf,我瞎了!请参阅我的编辑。有没有比检查每个值是否为 NULL 更好的方法?
标签: mysql linux database sqlite