当前位置:首页 > 汽车 >

sqlite3功能(sqlite3官网中文)

来源:原点资讯(www.yd166.com)时间:2023-04-22 14:30:00作者:YD166手机阅读>>

sqlite3功能,sqlite3官网中文(1)

关注开源中国OSC头条号,获取最新技术资讯

SQLite3 详细介绍

sqlite3pp

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

示例代码如下:

database 数据库

sqlite3pp::database db("test.db"); db.execute("INSERT INTO contacts (name, phone) VALUES ('Mike', '555-1234')");

command 命令

sqlite3pp::command cmd( db, "INSERT INTO contacts (name, phone) VALUES (?, ?)"); cmd.binder() << "Mike" << "555-1234"; cmd.execute(); sqlite3pp::command cmd(db, "INSERT INTO contacts (name, phone) VALUES (?, ?)"); cmd.bind(1, "Mike", sqlite3pp::nocopy); cmd.bind(2, "555-1234", sqlite3pp::nocopy); cmd.execute(); sqlite3pp::command cmd( db, "INSERT INTO contacts (name, phone) VALUES (?100, ?101)"); cmd.bind(100, "Mike", sqlite3pp::nocopy); cmd.bind(101, "555-1234", sqlite3pp::nocopy); cmd.execute(); sqlite3pp::command cmd( db, "INSERT INTO contacts (name, phone) VALUES (:user, :phone)"); cmd.bind(":user", "Mike", sqlite3pp::nocopy); cmd.bind(":phone", "555-1234", sqlite3pp::nocopy); cmd.execute(); sqlite3pp::command cmd( db, "INSERT INTO contacts (name, phone) VALUES (:user, '555-0000');" "INSERT INTO contacts (name, phone) VALUES (:user, '555-1111');" "INSERT INTO contacts (name, phone) VALUES (:user, '555-2222')"); cmd.bind(":user", "Mike", sqlite3pp::nocopy); cmd.execute_all();

transaction 事务

sqlite3pp::transaction xct(db); { sqlite3pp::command cmd( db, "INSERT INTO contacts (name, phone) VALUES (:user, :phone)"); cmd.bind(":user", "Mike", sqlite3pp::nocopy); cmd.bind(":phone", "555-1234", sqlite3pp::nocopy); cmd.execute(); } xct.rollback();

query 查询

sqlite3pp::query qry(db, "SELECT id, name, phone FROM contacts");for (int i = 0; i < qry.column_count(); i) { cout << qry.column_name(i) << "\t"; } for (sqlite3pp::query::iterator i = qry.begin(); i != qry.end(); i) { for (int j = 0; j < qry.column_count(); j) { cout << (*i).get<char const*>(j) << "\t"; } cout << endl; } for (sqlite3pp::query::iterator i = qry.begin(); i != qry.end(); i) { int id; char const* name, *phone; std::tie(id, name, phone) = (*i).get_columns<int, char const*, char const*>(0, 1, 2); cout << id << "\t" << name << "\t" << phone << endl; } for (sqlite3pp::query::iterator i = qry.begin(); i != qry.end(); i) { string name, phone; (*i).getter() >> sqlite3pp::ignore >> name >> phone; cout << "\t" << name << "\t" << phone << endl; } for (auto v : qry) { string name, phone; v.getter() >> sqlite3pp::ignore >> name >> phone; cout << "\t" << name << "\t" << phone << endl; }

attach

sqlite3pp::database db("foods.db"); db.attach("test.db", "test"); sqlite3pp::query qry( db, "SELECT epi.* FROM episodes epi, test.contacts con WHERE epi.id = con.id");

backup 备份

sqlite3pp::database db("test.db"); sqlite3pp::database backupdb("backup.db"); db.backup(backupdb); db.backup( backupdb, [](int pagecount, int remaining, int rc) { cout << pagecount << "/" << remaining << endl;if (rc == SQLITE_OK || rc == SQLITE_BUSY || rc == SQLITE_LOCKED) { // sleep or do nothing.} });

callback 回调

struct rollback_handler{ void operator()() { cout << "handle_rollback" << endl; } }; sqlite3pp::database db("test.db"); db.set_commit_handler([]{ cout << "handle_commit\n"; return 0; }); db.set_rollback_handler(rollback_handler()); int handle_authorize(int evcode, char const* p1, char const* p2, char const* dbname, char const* tvname) { cout << "handle_authorize(" << evcode << ")" << endl; return 0; } db.set_authorize_handler(&handle_authorize); struct handler{ handler() : cnt_(0) {} void handle_update(int opcode, char const* dbname, char const* tablename, int64_t rowid) { cout << "handle_update(" << opcode << ", " << dbname << ", " << tablename << ", " << rowid << ") - " << cnt_ << endl; } int cnt_; };using namespace std::placeholders;db.set_update_handler(std::bind(&handler::handle_update, &h, _1, _2, _3, _4));

function

int test0() { return 100; } sqlite3pp::database db("test.db"); sqlite3pp::ext::function func(db); func.create<int ()>("test0", &test0); void test1(sqlite3pp::ext::context& ctx) { ctx.result(200); }void test2(sqlite3pp::ext::context& ctx) { string args = ctx.get<string>(0); ctx.result(args); }void test3(sqlite3pp::ext::context& ctx) { ctx.result_copy(0); } func.create("test1", &test1); func.create("test2", &test2, 1); func.create("test3", &test3, 1); func.create<int ()>("test4", []{ return 500; }); string test5(string const& value) { return value; } string test6(string const& s1, string const& s2, string const& s3) { return s1 s2 s3; } func.create<int (int)>("test5", [](int i){ return i 10000; }); func.create<string (string, string, string)>("test6", &test6); sqlite3pp::query qry( db, "SELECT test0(), test1(), test2('x'), test3('y'), test4(), test5(10), " "test6('a', 'b', 'c')");

aggregate

void step(sqlite3pp::ext::context& c) { int* sum = (int*) c.aggregate_data(sizeof(int)); *sum = c.get<int>(0); }void finalize(sqlite3pp::ext::context& c) { int* sum = (int*) c.aggregate_data(sizeof(int)); c.result(*sum); } sqlite3pp::database db("foods.db"); sqlite3pp::ext::aggregate aggr(db); aggr.create("aggr0", &step, &finalize); struct mycnt{ void step() { n_; } int finish() {return n_; } int n_; }; aggr.create<mycnt>("aggr1"); struct strcnt{ void step(string const& s) { s_ = s; } int finish() {return s_.size(); } string s_; };struct plussum{ void step(int n1, int n2) { n_ = n1 n2; } int finish() {return n_; } int n_; }; aggr.create<strcnt, string>("aggr2"); aggr.create<plussum, int, int>("aggr3"); sqlite3pp::query qry( db, "SELECT aggr0(id), aggr1(type_id), aggr2(name), aggr3(id, type_id) " "FROM foods");

loadable extension 加载扩展

#define SQLITE3PP_LOADABLE_EXTENSION#include <sqlite3ppext.h>int sqlite3_extension_init( sqlite3 *pdb, char **pzErrMsg, const sqlite3_api_routines *pApi) { SQLITE_EXTENSION_INIT2(pApi); sqlite3pp:database db(sqlite3pp::ext::borrow(pdb)); // pdb is not closed since db just borrows it.}

开源中国旨在为中国IT技术人员提供一个全面的、快捷更新的用来检索开源软件以及交流使用开源经验的平台,目前已收录45000多款开源软件。关注开源中国OSC头条号,每日获取开源软件推荐,点击“了解更多”阅读原文,获取 Sqlite3 的详细介绍与下载地址。

栏目热文

sqlite3数据库高级使用

sqlite3数据库高级使用

SQLite在《嵌入式数据库sqlite3命令操作基础篇-增删改查,小白一文入门》一文中讲解了如何实现sqlite3的基...

2023-04-22 14:36:29查看全文 >>

sqlite怎么删除指定的记录(sqlite删除所有数据库)

sqlite怎么删除指定的记录(sqlite删除所有数据库)

一、概念:1.1什么是数据:在计算机科学中,数据是所有能输入计算机并被计算机程序处理的符号的介质的总称、是信息的集合1....

2023-04-22 14:33:36查看全文 >>

sqlite3参数设置(sqlite3操作实例)

sqlite3参数设置(sqlite3操作实例)

一、简介SQLITE3非常小,轻量级,就几百K大小;不需要用户名,密码,直接就可以对数据库进行操作。二、安装sqlite...

2023-04-22 14:09:17查看全文 >>

sqlite优缺点(sqlite 利弊)

sqlite优缺点(sqlite 利弊)

英文原文: https://blog.nelhage.com/post/reflections-on-performan...

2023-04-22 14:28:25查看全文 >>

sqlite3查询(sqlite3查询表信息)

sqlite3查询(sqlite3查询表信息)

今天学习使用Sqlite3创建数据库、表、运行查询,并记录学习过程欢迎大家一起交流分享。首先新建一个python文件命名...

2023-04-22 14:33:18查看全文 >>

sqlite3数据库优缺点(sqlite适合多少数据量)

sqlite3数据库优缺点(sqlite适合多少数据量)

来源:机器之心本文约4700字,建议阅读8分钟。本文介绍了十三个适合中级 Python 开发人员练手的项目。[ 导 读 ...

2023-04-22 14:25:55查看全文 >>

sqlite3.5教程(sqlite3 最新版)

sqlite3.5教程(sqlite3 最新版)

SQLite是一种轻量级的嵌入式关系型数据库管理系统,它可以在多种操作系统上运行,并且无需独立的数据库服务器。以下是一个...

2023-04-22 14:40:21查看全文 >>

煤气灶回火维修视频(家用煤气灶回火怎么修理)

煤气灶回火维修视频(家用煤气灶回火怎么修理)

燃气灶“回火”指的是燃气高浓度聚集在灶具内,点火时出现爆燃现象,生活中一般发生于连续点火时。燃气灶“回火”会造成什么危...

2023-04-22 14:11:50查看全文 >>

煤气灶回火的原因和解决方法

煤气灶回火的原因和解决方法

大家好,我是深圳小哥帮的小哥,专注分享家居生活妙招,欢迎关注!租房的时候我们会看房间能不能做饭,买房时我们也会看厨房面积...

2023-04-22 14:41:12查看全文 >>

煤气灶点火回火怎么回事(煤气灶点火有爆炸声怎么回事)

煤气灶点火回火怎么回事(煤气灶点火有爆炸声怎么回事)

当使用燃气灶时,突然听到“嘭”一声的爆燃声可是够吓一跳的,尤其是在声音出现的瞬间还会看到火焰闪爆,让人怀疑是不是出现燃气...

2023-04-22 14:34:29查看全文 >>

文档排行