sqlite3的使用
splite.hpp
C++
/*
封装实现一个sqliteHelper类,提供简单的sqlite数据库接口,完成数据的基础增删改查操作
1.创建/打开数据库
2.针对打开的数据库进行操作
1.表的操作
2.数据的操作
3.关闭数据库
*/
#include <iostream>
#include <string>
#include <vector>
#include <sqlite3.h>
class SqliteHelper
{
public:
typedef int(*SqliteCallback)(void*,int ,char**,char**);
SqliteHelper(const std::string &dbfile):_dbfile(dbfile),_handler(nullptr){}
bool open(int safe_level=SQLITE_OPEN_FULLMUTEX)
{
//int sqlite3_open_v2(const char *filename, sqlite3 **ppDb, int flags, const char *zVfs );
int ret=sqlite3_open_v2(_dbfile.c_str(),&_handler,SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | safe_level,nullptr);
if(ret!=SQLITE_OK)
{
std::cout<<"创建/打开sqlite数据库失败";
std::cout<<sqlite3_errmsg(_handler)<<std::endl;
return false;
}
return true;
}
bool exec(const std::string &sql,SqliteCallback cb,void *arg)
{
//int sqlite3_exec(sqlite3*, char *sql, int (*callback)(void*,int,char**,char**), void* arg, char **err)
int ret=sqlite3_exec(_handler,sql.c_str(),cb,arg,nullptr);
if(ret!=SQLITE_OK)
{
std::cout<<sql<<std::endl;
std::cout<<"执行语句失败!";
std::cout<<sqlite3_errmsg(_handler)<<std::endl;
return false;
}
return true;
}
void close()
{
// int sqlite3_close_v2(sqlite3*)
if(_handler) sqlite3_close_v2(_handler);
}
private:
std::string _dbfile;
sqlite3* _handler;
};
C++
#include "sqlite.hpp"
#include <cassert>
int select_stu_callback(void*arg,int col_count,char**result,char**fields_name)
{
std::vector<std::string> *arry=(std::vector<std::string>*)arg;
arry->push_back(result[0]);
return 0;//必须有!
}
int main()
{
SqliteHelper helper("./test.db");
//1.打开/创建库文件
assert(helper.open());
//2.创建表,学生信息:学号,姓名,年龄
const char* ct="create table if not exists student(sn int primary key,name varchar(32),age int)";
assert(helper.exec(ct,nullptr,nullptr));
//3.新增数据,删除,修改,查询
//const char* insert_sql="insert into student values(1,'小明',18),(2,'小黑',19),(3,'小红',18)";
//assert(helper.exec(insert_sql,nullptr,nullptr));
//const char *update_sql="update student set name ='张小明' where sn=1";
//assert(helper.exec(update_sql,nullptr,nullptr));
//const char *delete_sql="delete from student where sn=3";
//assert(helper.exec(delete_sql,nullptr,nullptr));
const char *select_sql="select name from student ;";
std::vector<std::string> arry;
assert(helper.exec(select_sql,select_stu_callback,&arry));
for(auto &name: arry)
{
std::cout<<name<<std::endl;
}
//4.关闭数据库
helper.close();
return 0;
}
makefile
makefile
main:main.cc
g++ -std=c++11 $^ -o $@ -lsqlite3