gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:17:59 25 4
gpt4 key购买 nike

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

首先,我需要将 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/

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