一个简单sqlite3的封装类

本文介绍了一个简单的SQLite3封装类的实现方法,包括数据库的打开、表的创建、数据插入及查询等功能,并通过一个示例程序展示了如何使用该封装类。

一个sqlite3封装类,后缀叫.h 还是叫.cpp 呢, 一般来说.h 和 .cpp 是分开写的, .h 只声明头文件,.cpp 来实现

但这里为了简单,把声明和实现放到一起了, 所以叫.h或.cpp 都可以, 这里就叫db.cpp 吧,代码如下:

实现了创建表,使用表的演示:

/*
 * 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"
#include "stdlib.h"
#include <vector>
#include <string.h>
#define DEBUGLEVEL 5
using namespace std;
#ifndef WIN32
#define _atoi64(val) strtoll(val,NULL,10)
#endif
class ClipNode
{
public:
	int beginVideoPts;
	int endVideoPts;
};
class DbClip
{
	sqlite3 *db;
public:
	int open(const char *filePath)
	{

		int ret = sqlite3_open(filePath, &db);
		return ret;
	}
	int create()
	{
		char sql[1000] = "create table clips(id integer primary key, bpts integer, epts 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; //stmt->statement, 语句
		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);
			sprintf(buffer,"%d",ids[i]);
			strcat(sql,",");
			strcat(sql,buffer);
		}
		strcat(sql,");");

		int rt=sqlite3_get_table(db,sql,&azResult,&n_row,&n_column,NULL);
#if (DEBUGLEVEL > 3)        
		printf("getTable rt:%d\n",rt);
		printf("sentense:\n%s\n",sql);
		//其中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);
	}
};


 

补充一个测试程序main.cpp, 包含上上面文件db.cpp

#include <iostream>
#include <stdio.h>
#include "db.cpp"

const char *tdb = "testDb.db";
int main(void)
{
	vector<ClipNode> allNodes;
	vector<int> ids;
	DbClip *db = new DbClip();
	int rt=db->open(tdb);
	printf("open rt is %d\n",rt); //0 is succeed. SQLITE_OK
	rt =db->create();
	printf("create rt is %d\n",rt); //0 is succeed. 1. SQLITE_ERROR
	rt=db->insert(1,1,2);
	printf("insert rt is %d\n",rt); //0 is succeed. 19. SQLITE_CONSTRAINT
	db->insert(2,2,5);
	db->insert(3,2,8);
	int id=db->queryMaxId();
	printf("maxID is %d\n",id);
	ids.push_back(1);
	ids.push_back(2);
	ids.push_back(3);
	db->query(allNodes,ids);
	db->close();

	return 0;
}

把玩一下,就能对sqlite3 的使用有个入门级了解了.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值