在数据库中明明有符合条件的数据,可以在程序中的代码如下,显示读取的行数和列数为零,由于程序是多线程,有可能别的线程也在读取数据库或者写入数据库,是什么原因导致行数和列数为零呢?
char str_addr[18],*errmsg=NULL;
int front=0,i;
int nrow;
int j=0 ,ncolumn,rc;
sqlite3 *db=NULL;
char **result;
DataTypebdebase item;
ba2str(bdaddr,str_addr);
extern char DataDays[5];
//查找数据库
char sql_where[80], sql_query[260]=" select count(*) as totalnum from bdaddr where date(rx_time)=date('now','localtime') and ";
sprintf(sql_where," str_bdaddr='%s' and pushfilename='%s' ;",str_addr,pushfilename);
strcat(sql_query,sql_where);
printf("sql_query is %s and size is %d\n ",sql_query,strlen(sql_query));
printf("datebasefile is %s\n",databasefile);
rc=sqlite3_open(databasefile,&db);
if(rc){
printf("open db error!\n");
}else{
sqlite3_get_table(db,sql_query,&result,&nrow,&ncolumn,&errmsg);
printf("ok!^_^ nrow is %d and ncolumn is %d\n",nrow,ncolumn);
for(i=1;i<nrow+1;i++)
{
for( j=0;j<ncolumn;j++){
*daynum=atoi(result[i*ncolumn+j]);
printf("daynum: is %s is %s \n",result[j],result[i*ncolumn+j]);
}
}
sqlite3_free_table(result);
sqlite3_close(db);
}
------解决方案--------------------------------------------------------
debug 中看一下sql_where这个变量的内容,然后直接在SQLITE中试一下这个SQL语句。估计是SQL语句自身有问题。
------解决方案--------------------------------------------------------
对数据库的连接不要放在线程中。