gsoap读取的sqlite数据库,并编写为JSON格式

这是gsoap中的一段重要代码

int SmsWBSService::run(int port)
{ if (soap_valid_socket(this->master) || soap_valid_socket(bind(NULL,port,100)))
{ for (;;)
{ if (!soap_valid_socket(accept()) || serve())
return this->error;
soap_destroy(this);
soap_end(this);
}
}
else
return this->error;
return SOAP_OK;
}


这段代码是用C++编写的gsoap服务器,用来监听客户端,接受客户端的请求。


如题,这里需要了解sqlite的几个重要接口函数

int sqlite3_prepare(
sqlite3 *db,/* 打开的数据库句柄 */
const char *zsql,/* UTF8编码的sql语句,可以参数化 */
int nByte,/* sql语句的字节长度,可以传递-1,即字符串以\0结尾 */
sqlite3_stmt **ppStmt,/* 输出:预编译之后的sql语句句柄 */
const char **pzTail /* 输出: 指向zsql缓冲区中跳过有效sql字符串的第一个字节 */
);

int sqlite3_step(sqlite3_stmt*);

如果执行成功会返回sqlITE_DONE,如果查询有结果会返回sqlITE_ROW,并可以通过API获取结果中的第一行数据,需要获取下一行数据可以再次调用sqlite3_step直到返回sqlITE_DONE表示后面没有数据了

const unsigned char *sqlite3_column_text(sqlite3_stmt*,int iCol);

函数返回字符串,其中sqlite3_column_text输出的字符串使用UTF8编码

int sqlite3_column_count(sqlite3_stmt*);

获得列数,调用成功时返回数据库的列数

这里主要有两个方面:数据库的遍历和字符的拼接。

通过调用sqlite3_step(sqlite3_stmt*)和const unsigned char *sqlite3_column_text(sqlite3_stmt*,int iCol);可以完成对数据库的遍历,每次调用结束后用sprintf将拼接得到的字符串,可以得到一行的数据,将每行的数据拼接就可以得到整个数据库

@H_403_153@int webService::get_cof_table(int contolPm,xsd__string* table) { //Read the cof_table,and send the table's content to the client. char tmp[256]; //To storage the table char column_lines[256]; sqlite3* cof_db = NULL; sqlite3_stmt *ppStmt = NULL; const char *pzTail = NULL; char* errmsg = NULL; char* sql = NULL; int rc_cof; rc_cof = sqlite3_open("cof.db",&cof_db); sql = "select * from cof_table;"; int i = 0; sqlite3_prepare_v2(cof_db,sql,strlen(sql),&ppStmt,&pzTail); int ncolcount = sqlite3_column_count(ppStmt); memset(column_lines,256); strcat(column_lines,"{"); while(sqlite3_step(ppStmt) == sqlITE_ROW) { printf("\n"); //printf("0 %s",tmp); for(i = 0;i<ncolcount-1;i++) { if(i == 0) { sprintf(tmp,"{\"%s\":\"%s\",",sqlite3_column_name(ppStmt,0),sqlite3_column_text(ppStmt,0)); } else { sprintf(tmp,"\"%s\":\"%s\",i),i)); } //printf("%s",tmp); strcat(column_lines,tmp); } sprintf(tmp,"\"%s\":\"%s\"},i)); strncat(column_lines,tmp,strlen(tmp)); } strcpy(&column_lines[strlen(column_lines)-1],"}"); sqlite3_finalize(ppStmt); *table = column_lines; memset(column_lines,256); close(cof_db); /*table = "{\"cof_table\":\ [{\"KEY\":\"G_lamp\",\"KEY_VALUE\":"0",\"KEY_DESC\":\"杀菌灯\",\"KEY_LIST\":"[0,1]"},\ {\"KEY\":\"FANS\",\"KEY_DESC\":\"风机\",1,2]"},\ {\"KEY\":\"MODULE\",\"KEY_DESC\":\"净化器\",1]"}] \ }";最终传输的格式*/ return 0; }

相关文章

安装 在Windows上安装SQLite。 访问官网下载下Precompliled Binaries for Windows的两个压缩包。 创建s...
一、安装 下载地址:http://www.sqlite.org/download.html 将Precompiled Binaries for Windows下的包下...
实例: 会员信息管理 功能:1.查看数据库 2.清空数据库 3.增加会员 4.删除会员 5.更新会员 6.查找会员  ...
关于SQLite SQLite是一个轻量的、跨平台的、开源的数据库引擎,它的在读写效率、消耗总量、延迟时间和整...