2015-03-30 68 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