基于sqlite的c语言数据读取(c为主)
|
创建数据库: create table pmTable ( DATA CHAR(30), pmValueINTEGER ); 说明:DATA用来存放实时保存的时间格式为yyyy/mm/dd hh:00:00,使用c语言来得到系统时间并存入数据库(PS:后期对数据库了解多了后,可以考虑使用sql语句来实现),
<pre name="code" class="cpp">time_t timep;
struct tm *p;
time(&timep);
char buff[30] = {0};
p = localtime(&timep); //Get local time
sprintf(buff,"%d/%d/%d %d:00:00",(1900+p->tm_year),(1+p->tm_mon),p->tm_mday,p->tm_hour);
sql = sqlite3_mprintf("INSERT INTO pmTable VALUES("%s",39);",buff);
创建后的数据库为 2014/11/6 7:00:00|32 2014/11/6 8:00:00|32 2014/11/7 8:00:00|43 2014/11/8 1:00:00|12 2014/11/8 2:00:00|14 2014/11/9 3:00:00|19 2014/11/10 5:00:00|20 2014/11/11 10:00:00|39 下面就是怎么读取特定时间的数据和对数据进行操作: 1.读取当前月每天的1小时内的数据,并以 {"day":[{"hour":"00","value":"25"},{"hour":"01","value":"36"},{"hour":"02","value":"60"},{"hour":"03","value","23"}...]}这样的数据格式返回 sql = sqlite3_mprintf("select pmValue from pmTable where(DATA like "%d/%d/%d%c");",p->tm_mday-1,'%');
sqlite3_prepare_v2(db,sql,-1,&ppStmt,NULL);
memset(column,256);
char tmp[50] = {0};
memset(sql,sizeof(sql));
sql = sqlite3_mprintf("select DATA from pmTable where(DATA like "%d/%d/%d%c");",'%');
sqlite3_stmt *ppStmt2 = NULL;
sqlite3_prepare_v2(db,&ppStmt2,NULL);
char time[3] = {0};
sprintf(column,"{"day":[");
while(sqlite3_step(ppStmt) == SQLITE_ROW)
{
char ss[220] = {0};
if(sqlite3_step(ppStmt2) == SQLITE_ROW)
{
sprintf(ss,"%sn",sqlite3_column_text(ppStmt2,0));
int i = 0;
int k= 0;
for(; i < strlen(ss); i++)
{
if(strncmp(ss+i," ",1) == 0)
{
k = 1;
continue;
}
if(k == 1 && strncmp(ss+i,":",1) != 0)
{
strncat(time,ss+i,1);
}
else if(strncmp(ss+i,1) == 0)
break;
}
}
sprintf(tmp,"{"hour":"%s","value":"%s"},",time,sqlite3_column_text(ppStmt,0));
strcat(column,tmp);
memset(tmp,sizeof(tmp));
memset(time,sizeof(time));
}
column[strlen(column) - 1] = ' ';
strcat(column,"]}");
printf("column = %sn",column);
2.获取当前月每天的pmValue的最大值,并以 {"month":[{"day":"2014/01/01","max_value":"90","min_value":"23"},{"day":"2014/01/02","max_value":"77","min_value":"20"},{"day":"2014/01/03","max_value":"66","min_value":"18"},{"day":"2014/01/04","max_value":"155","min_value":"45"},{"day":"2014/01/05","max_value":"200","min_value":"100"}....]}这样的数据格式返回 sql = sqlite3_mprintf("select DATA from pmTable where(DATA like "%d/%d/%c");",'%');
sqlite3_prepare_v2(db,NULL);
memset(column,sizeof(column));
char tmp[50] = {0};
memset(sql,sizeof(sql));
char time[30] = {0};
char ttmp[30] = {0};
sprintf(column,"{"month":[");
while(sqlite3_step(ppStmt) == SQLITE_ROW)
{
<span style="white-space:pre"> </span>char ss[220] = {0};
sprintf(ss,"%s",0));
int i = 0;
for(; i < strlen(ss); i++)
{
if(strncmp(ss+i,1) == 0)
{
break;
}
strncat(time,1);
}
if(strcmp(ttmp,time) == 0)
{
memset(time,sizeof(time));
continue;
}
memset(ttmp,sizeof(ttmp));
sql = sqlite3_mprintf("select max(pmValue) from pmTable where(DATA like "%s%c");",NULL);
if(sqlite3_step(ppStmt2) == SQLITE_ROW)
{
sprintf(tmp,"{"day":"%s","max_value":"%s"},tmp);
}
strcpy(ttmp,time);
memset(time,sizeof(time));
memset(tmp,sizeof(tmp));
}
column[strlen(column) - 1] = ' ';
strcat(column,"]}");
printf("column = %sn",column); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
