SQLite3++ 使用 C++ 封装的 SQLite3 API开源项目

我要开发同款
匿名用户2018年07月13日
64阅读

技术信息

开源地址
https://github.com/iwongu/sqlite3pp
授权协议
MIT

作品详情

sqlite3pp该库对SQLite3API使用C++类进行包装,支持几乎所有SQLite3功能(打开数据库、查询、执行命令、事物等)。

示例代码如下:database数据库sqlite3pp::database db("test.db");db.execute("INSERT INTO cotacts (ame, phoe) VALUES ('Mike', '555-1234')");commad命令sqlite3pp::commad cmd(  db, "INSERT INTO cotacts (ame, phoe) VALUES (?, ?)");cmd.bider() << "Mike" << "555-1234";cmd.execute();sqlite3pp::commad cmd(db, "INSERT INTO cotacts (ame, phoe) VALUES (?, ?)");cmd.bid(1, "Mike", sqlite3pp::ocopy);cmd.bid(2, "555-1234", sqlite3pp::ocopy);cmd.execute();sqlite3pp::commad cmd(  db, "INSERT INTO cotacts (ame, phoe) VALUES (?100, ?101)");cmd.bid(100, "Mike", sqlite3pp::ocopy);cmd.bid(101, "555-1234", sqlite3pp::ocopy);cmd.execute();sqlite3pp::commad cmd(  db, "INSERT INTO cotacts (ame, phoe) VALUES (:user, :phoe)");cmd.bid(":user", "Mike", sqlite3pp::ocopy);cmd.bid(":phoe", "555-1234", sqlite3pp::ocopy);cmd.execute();sqlite3pp::commad cmd(  db,  "INSERT INTO cotacts (ame, phoe) VALUES (:user, '555-0000');"  "INSERT INTO cotacts (ame, phoe) VALUES (:user, '555-1111');"  "INSERT INTO cotacts (ame, phoe) VALUES (:user, '555-2222')");cmd.bid(":user", "Mike", sqlite3pp::ocopy);cmd.execute_all();trasactio事务sqlite3pp::trasactio xct(db);{  sqlite3pp::commad cmd(    db, "INSERT INTO cotacts (ame, phoe) VALUES (:user, :phoe)");  cmd.bid(":user", "Mike", sqlite3pp::ocopy);  cmd.bid(":phoe", "555-1234", sqlite3pp::ocopy);  cmd.execute();}xct.rollback();query查询sqlite3pp::query qry(db, "SELECT id, ame, phoe FROM cotacts");for (it i = 0; i < qry.colum_cout(); ++i) {  cout << qry.colum_ame(i) << "\t";}for (sqlite3pp::query::iterator i = qry.begi(); i != qry.ed(); ++i) {  for (it j = 0; j < qry.colum_cout(); ++j) {    cout << (*i).get<char cost*>(j) << "\t";  }  cout << edl;}for (sqlite3pp::query::iterator i = qry.begi(); i != qry.ed(); ++i) {  it id;  char cost* ame, *phoe;  std::tie(id, ame, phoe) =    (*i).get_colums<it, char cost*, char cost*>(0, 1, 2);  cout << id << "\t" << ame << "\t" << phoe << edl;}for (sqlite3pp::query::iterator i = qry.begi(); i != qry.ed(); ++i) {  strig ame, phoe;  (*i).getter() >> sqlite3pp::igore >> ame >> phoe;  cout << "\t" << ame << "\t" << phoe << edl;}for (auto v : qry) {  strig ame, phoe;  v.getter() >> sqlite3pp::igore >> ame >> phoe;  cout << "\t" << ame << "\t" << phoe << edl;}attachsqlite3pp::database db("foods.db");db.attach("test.db", "test");sqlite3pp::query qry(  db,  "SELECT epi.* FROM episodes epi, test.cotacts co WHERE epi.id = co.id");backup备份sqlite3pp::database db("test.db");sqlite3pp::database backupdb("backup.db");db.backup(backupdb);db.backup(  backupdb,  [](it pagecout, it remaiig, it rc) {    cout << pagecout << "/" << remaiig << edl;if (rc == SQLITE_OK || rc == SQLITE_BUSY || rc == SQLITE_LOCKED) {      // sleep or do othig.}  });callback回调struct rollback_hadler{  void operator()() {    cout << "hadle_rollback" << edl;  }};sqlite3pp::database db("test.db");db.set_commit_hadler([]{ cout << "hadle_commit\"; retur 0; });db.set_rollback_hadler(rollback_hadler());it hadle_authorize(it evcode, char cost* p1, char cost* p2,                     char cost* dbame, char cost* tvame) {  cout << "hadle_authorize(" << evcode << ")" << edl;  retur 0;}db.set_authorize_hadler(&hadle_authorize);struct hadler{  hadler() : ct_(0) {}  void hadle_update(it opcode, char cost* dbame,                     char cost* tableame, it64_t rowid) {    cout << "hadle_update(" << opcode << ", " << dbame << ", " << tableame << ", " << rowid << ") - " << ct_++ << edl;  }  it ct_;};usig amespace std::placeholders;db.set_update_hadler(std::bid(&hadler::hadle_update, &h, _1, _2, _3, _4));fuctioit test0(){  retur 100;}sqlite3pp::database db("test.db");sqlite3pp::ext::fuctio fuc(db);fuc.create<it ()>("test0", &test0);void test1(sqlite3pp::ext::cotext& ctx){  ctx.result(200);}void test2(sqlite3pp::ext::cotext& ctx){  strig args = ctx.get<strig>(0);  ctx.result(args);}void test3(sqlite3pp::ext::cotext& ctx){  ctx.result_copy(0);}fuc.create("test1", &test1);fuc.create("test2", &test2, 1);fuc.create("test3", &test3, 1);fuc.create<it ()>("test4", []{ retur 500; });strig test5(strig cost& value){  retur value;}strig test6(strig cost& s1, strig cost& s2, strig cost& s3){  retur s1 + s2 + s3;}fuc.create<it (it)>("test5", [](it i){ retur i + 10000; });fuc.create<strig (strig, strig, strig)>("test6", &test6);sqlite3pp::query qry(  db,  "SELECT test0(), test1(), test2('x'), test3('y'), test4(), test5(10), "  "test6('a', 'b', 'c')");aggregatevoid step(sqlite3pp::ext::cotext& c){  it* sum = (it*) c.aggregate_data(sizeof(it));  *sum += c.get<it>(0);}void fialize(sqlite3pp::ext::cotext& c){  it* sum = (it*) c.aggregate_data(sizeof(it));  c.result(*sum);}sqlite3pp::database db("foods.db");sqlite3pp::ext::aggregate aggr(db);aggr.create("aggr0", &step, &fialize);struct myct{  void step() {    ++_;  }  it fiish() {retur _;  }  it _;};aggr.create<myct>("aggr1");struct strct{  void step(strig cost& s) {    s_ += s;  }  it fiish() {retur s_.size();  }  strig s_;};struct plussum{  void step(it 1, it 2) {    _ += 1 + 2;  }  it fiish() {retur _;  }  it _;};aggr.create<strct, strig>("aggr2");aggr.create<plussum, it, it>("aggr3");sqlite3pp::query qry(  db,  "SELECT aggr0(id), aggr1(type_id), aggr2(ame), aggr3(id, type_id) "  "FROM foods");loadableextesio加载扩展#defie SQLITE3PP_LOADABLE_EXTENSION#iclude <sqlite3ppext.h>it sqlite3_extesio_iit(  sqlite3 *pdb,  char **pzErrMsg,  cost sqlite3_api_routies *pApi) {  SQLITE_EXTENSION_INIT2(pApi);  sqlite3pp:database db(sqlite3pp::ext::borrow(pdb));  // pdb is ot closed sice db just borrows it.}

功能介绍

sqlite3pp 该库对SQLite3 API使用C++类进行包装,支持几乎所有SQLite3功能(打开数据库、查询、执行命令、事物等)。 示例代码如下: database 数据库
sql...

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论