/*
* author: hjjdebug
* date: 2011
* sqlite 数据库,包含4个文件sqlite3.lib sqlite3.dll sqlite3.h sqlite3.def
* 用navicat for sqlite 工具观察数据库文件.sqlite 文件
* 我很佩服开源精神。
* 一个简单sqlite的封装类,留个纪念吧
*/
#include "sqlite3.h"
#include "stdio.h"
#define DEBUGLEVEL 0
using namespace std;
class DbClip
{
sqlite3 *db;
public:
int open(char *filePath)
{
int ret = sqlite3_open(filePath, &db);
return ret;
}
int create()
{
char sql[1000] = "create table clips(id integer primary key, start integer, end integer, create_time datetime);";
int ret=sqlite3_exec(db,sql,0,0,0);
return ret;
}
int insert(int id, int start, int end)
{
char sql[1000];
sprintf(sql,"insert into clips values (%d, %d, %d, datetime('now','localtime'));", id, start,end);
return sqlite3_exec(db,sql,0,0,0);
}
int queryMaxId()
{
sqlite3_stmt * stmt;
char sql[1000] = "select max(id) from clips;";
sqlite3_prepare(db,sql,-1,&stmt,0);
int rc = sqlite3_step(stmt);
if(rc==SQLITE_ROW)
{
int n = sqlite3_column_int(stmt,0);
return n;
}
return -1;
}
int query(vector<ClipNode> &allNodes, vector <int> &ids)
{
char sql[512*1024];
char buffer[256];
int n_row=0, n_column=0;
char **azResult; //存放结果
sprintf(sql,"select bpts, epts from clips where id in (%d",ids[0]);
// sprintf(sql,"select bpts from clips;");
for(unsigned i=1; i<ids.size(); i++)
{
itoa(ids[i],buffer,10);
strcat(sql,",");
strcat(sql,buffer);
}
strcat(sql,");");
sqlite3_get_table(db,sql,&azResult,&n_row,&n_column,NULL);
#if (DEBUGLEVEL > 3)
//其中nrow为行数,ncolum为列数
printf("/nThe result of querying is : /n");
for(int i=1;i<n_row+1;i++)
{
for(int j=0;j<n_column;j++)
printf("%s ",azResult[i*n_column+j]);
printf("/n");
}
#endif
int index=2; // 跳开开始的一个空元素
ClipNode node;
for(int i=0; i<n_row; i++)
{
node.beginVideoPts =_atoi64(azResult[index]);
node.endVideoPts = _atoi64(azResult[index+1]);
index+=2;
allNodes.push_back(node);
}
return true;
}
int close()
{
return sqlite3_close(db);
}
};