2015-03-30 86 views
0

正在尝试将值插入到mysql数据库(在beaglebone黑色上的linux debian)的C项目中工作。代码工作正常时,我插入常量到数据库中,但我不知道如何获取日期/时间和双数(温度)的变量。在它已经一个星期,但似乎无法弄清楚,所以任何洞察力将不胜感激。c将变量插入到mysql数据库beaglebone

我试过的所有东西都会以编译错误结束,在数据库或零中为null。我觉得我很接近......但显然缺少一些东西,可能是在INSERT INTO行?

char buf[LEN]; 
time_t curtime; 
struct tm *loc_time; 

curtime = time (NULL); 

loc_time = localtime (&curtime); 


strftime (buf, LEN, "%Y-%m-%d" " " "%X", loc_time); 
fputs (buf, stdout); 


MYSQL *con = mysql_init(NULL); 

if (con == NULL) 
{ 
    fprintf(stderr, "mysql_init() failed\n"); 
    exit(1); 
} 

if (mysql_real_connect(con, "localhost", "user", "pass", "TempDB", 0, NULL, 0) == NULL) 
{ 
    finish_with_error(con); 
} 

if (mysql_query(con, "CREATE TABLE IF NOT EXISTS TempMeas(MeasTime DATETIME, Temp DOUBLE)")) 
{ 
    finish_with_error(con); 
} 

if (mysql_query(con, "INSERT INTO TempMeas(MeasTime, Temp) VALUES('%d', '%d')", buf, j)) 
{  
    finish_with_error(con); 
} 

mysql_close(con); 

exit(0); 

回答

1

如果要插入当前日期和时间到SQL,你可以做到这一点与SQL:

INSERT INTO TempMeas(MeasTime, Temp) VALUES(now(), 'other value'); 

你得到其他值到它:

#include<string.h>  # needed for sizeof() 

/* all the other stuff */ 

char query1[999]; 
int num = sprintf(query1, "INSERT INTO TempMeas(MeasTime, Temp) VALUES(now(), '%d');", j); 
if (num > sizeof(query1)) 
{ 
    printf("Error: Query too long.\n"); 
    exit (1); 
} 
if (mysql_query(con, query1)) 
{ 
    printf("Error: mysql_query failed."); 
    exit (1); 
} 

已更改,以便query已定义大小,并检查实际查询是否适合我们的char query[999]

+0

已尝试u唱你的3线代码,它编译,但是当我跑它时,它给了一个错误:“分段错误”。我已经尝试了一些其他的东西,但是当我使用常量插入时没有问题。有什么想法吗? – graceyj20 2015-04-02 00:49:50

+0

运行gdb并收到以下内容:程序收到信号SIGSEGV,分段故障。 0xb6b9d010来自/lib/arm-linux-gnueabihf/libc.so.6的_IO_str_overflow()然后做了回溯:#0 0xb6b9d010来自/lib/arm-linux-gnueabihf/libc.so.6的_IO_str_overflow() #1 0xb6b9c252 in /lib/arm-linux-gnueabihf/libc.so.6中的_IO_default_xsputn() #2 0xb6b7b712 in /lib/arm-linux-gnueabihf/libc.so.6中的vfprintf()中vsglef #3 0xb6b952e2(vsprintf )from /lib/arm-linux-gnueabihf/libc.so.6 #4 0xb6b82838 in sprintf()from /lib/arm-linux-gnueabihf/libc.so.6 #5 0x000088e0 in main(argc = 2, argv = 0xbef ... – graceyj20 2015-04-02 02:06:53

+0

对不起,我的错,编辑过的帖子, – 2015-04-02 09:11:29