我有一个连接到Raspberry Pi的温度传感器,我能够读取和打印温度。我接下来要做的是从传感器获取值并让它们登录到MySQL数据库。
一切正常,除了,我无法弄清楚如何格式化MySQL插入查询以使用f变量和read_dht_data()函数生成的h变量并将其传递给MIA_temp_insert(float f,float h )。
spark.executor.extraClassPath=<classapth>
spark.executor.extraClassPath=<classapth>
答案 0 :(得分:1)
您不能直接在printf()
中使用mysql_query()
- 样式格式说明符,如上所述。相反,您可以使用sprintf()
或snprintf()
将格式字符串(使用格式化的数字而不是格式说明符)写入缓冲区...然后将其作为查询字符串传递。
所以在MIA_temp_insert()
中,而不是以下内容:
if(mysql_query(conn, "INSERT INTO `temperature` (`id`, `Date`,`Time`, `Temperature`, `Humidity`) VALUES (NULL, CURRENT_DATE(), CURRENT_TIME(), '%f' , '%f')") !=0)
{
fprintf(stderr, "%s\n", mysql_error(conn));
exit (-1);
/* ...etc... */
...你可以试试这个:
/* Your original query string, with the %f specifiers */
const char *formatstring = "INSERT INTO `temperature` (`id`, `Date`,`Time`, `Temperature`, `Humidity`) VALUES (NULL, CURRENT_DATE(), CURRENT_TIME(), '%f' , '%f')";
/* snprintf() the query into a buffer, to fill in the numbers */
char buf[256]; // should be large enough for the query with the numbers filled in
if (snprintf(buf, sizeof(buf), formatstring, f, h) >= sizeof(buf))
{
exit(-1); // if snprintf() returned sizeof(buf) or more, buf was too short
}
/* call mysql_query() with the formatted query from the buffer */
if (mysql_query(conn, buf) != 0)
{
fprintf(stderr, "%s\n", mysql_error(conn));
exit (-1);
/* ...etc... */