sql - 在 C 中连接字符串以组成 SQL 查询

标签 sql c casting

我需要分两个单独的步骤来完成此操作,但到目前为止我还没有找到执行此操作的方法。

首先,我需要将 double 变量转换为 char 变量(并保存在该变量中)。我注意到类型转换在 C 中的工作方式与 Java/其他语言不同。如何将变量转换为字符串/字符?

其次,我需要连接字符串,总共有 6 个字符串变量需要连接,我只找到了 strcat 函数,它只需要 2 个参数。

这些是我正在尝试构建的字符串:

char *queryOne = "INSERT INTO location (id, carid, ownerid, lat, long, speed) VALUES (,2, 1, ";
char *queryTwo = lat; // lat is a double
char *queryThree = ",";
char *queryFour = longatude; // longatude is a double
char *queryFive = ",";
char *querySix = speed; // speed is a double

然后我需要连接字符串来工作:(mysql_query(conn, query)) 作为一个长字符串

编辑:所以可能,这应该转换我认为的数据类型?

char buffer [50];

char *queryOne = "INSERT INTO location (id, carid, ownerid, lat, long, speed) VALUES (,2, 1, ";
char *queryTwo = sprintf (buffer, "%d", lat);
char *queryThree = ",";
char *queryFour = sprintf (buffer, "%d", longatude);
char *queryFive = ",";
char *querySix = sprintf (buffer, "%d", speed);

fprintf(stderr, "Dta: %s\n", queryOne);
fprintf(stderr, "Dta: %s\n", *queryTwo);
fprintf(stderr, "Dta: %s\n", queryThree);
fprintf(stderr, "Dta: %s\n", *queryFour);
fprintf(stderr, "Dta: %s\n", queryFive);
fprintf(stderr, "Dta: %s\n", *querySix);

最佳答案

根据您的情况,您可以使用:

#define MAXSQL 256
char sql[MAXSQL];
snprintf(sql, MAXSQL,  "%s %f , %f , %f", queryOne, lat, longatude, speed);

snprintf 函数写入缓冲区,这是它的第一个参数。 http://www.cplusplus.com/reference/cstdio/snprintf/?kw=snprintf

现在您可以随意使用 sql 字符串。

请注意,我使用的是 snprintf 而不是 sprintf。这是为了避免潜在的缓冲区溢出。

另外,不要重复使用 strcat,因为这会导致 Shlemiel the Painter 算法,并且每次对 strcat 的调用都会变慢,因为 strcat 必须从头开始并找到 null 终止符。请参阅http://www.joelonsoftware.com/articles/fog0000000319.html了解更多信息。

关于sql - 在 C 中连接字符串以组成 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31841125/

相关文章:

mysql - 这个 SQL 重复行是怎么发生的?

mysql - 如果列字段超过 2 个单词,如何在 mysql 中删除?

mysql - Yii CDbCriteria 根据另一个表的计数选择行

c - 从字符串中删除元音

C: 分配给 char... 期待类型转换?

sql - 使用下表获取合并结果

c - 在 **my_vector 和 ***my_vector 上应用 free() 的区别

c++ - 被信号中断的系统调用仍需完成

ios - dequeueReusableCell 时 Swift 自定义 CollectionViewCell 转换失败

c++ - std::bad_cast 从 parent 到 child ?