浅谈SQLite

合集下载

sqlite 事务的实现原理

sqlite 事务的实现原理

sqlite 事务的实现原理SQLite是一种轻量级的数据库管理系统,支持事务的原子性、一致性、隔离性和持久性(ACID)特性。

事务是数据库管理系统中用于实现一组相关操作的机制,它可以确保一组操作要么全部成功执行,要么全部回滚到原始状态,从而保持数据的完整性和一致性。

本文将介绍SQLite事务的实现原理。

在SQLite中,事务以SQL语句的方式进行操作。

事务可以包含多个SQL语句,这些语句可以是插入、更新或删除数据的操作。

当执行一个事务时,SQLite会将所有的操作当作一个原子操作来处理,即要么全部成功执行,要么全部回滚到事务开始前的状态。

这种原子性是通过日志和回滚日志的方式实现的。

SQLite使用了一种称为“写日志”的技术来保证事务的原子性。

在执行一个事务之前,SQLite会将所有的修改操作记录在一个日志文件中,这个文件称为“写日志”。

当事务成功执行时,SQLite会将这个日志文件写到数据库文件中,从而保证了事务的原子性。

如果事务执行过程中发生了错误或回滚操作,则可以根据日志文件将数据库回滚到原始状态。

除了写日志,SQLite还使用了“回滚日志”的技术来实现事务的回滚操作。

在执行一个事务之前,SQLite会将当前的数据库状态记录在一个回滚日志文件中。

如果事务执行过程中发生了错误或回滚操作,则可以根据回滚日志文件将数据库回滚到事务开始前的状态。

在SQLite中,事务的隔离性是通过锁机制来实现的。

当一个事务对数据库进行修改时,它会获取一个写锁,这个锁会阻止其他事务对数据库进行修改。

只有当一个事务提交或回滚后,其他事务才能获取写锁。

这种锁机制可以确保事务的隔离性,防止多个事务同时对数据库进行修改,从而避免了数据不一致的情况。

SQLite使用了持久化技术来保证事务的持久性。

持久化是指在事务提交后,对数据库的修改操作将永久保存在存储介质上。

在SQLite 中,当一个事务提交后,它的修改操作会被写入数据库文件中,并且通过一些机制来确保这些修改操作能够在数据库崩溃或断电后仍然有效。

sqlite使用说明

sqlite使用说明

Sqlite使用说明一、简介:SQLite是目前最流行的开源嵌入式数据库,和很多其他嵌入式存储引擎相比(NoSQL),如BerkeleyDB、MemBASE等,SQLite可以很好的支持关系型数据库所具备的一些基本特征,如标准SQL语法、事务、数据表和索引等。

事实上,尽管SQLite拥有诸多关系型数据库的基本特征,然而由于应用场景的不同,它们之间并没有更多的可比性。

下面我们将列举一下SQLite的主要特征:1. 管理简单,甚至可以认为无需管理。

2. 操作方便,SQLite生成的数据库文件可以在各个平台无缝移植。

3. 可以非常方便的以多种形式嵌入到其他应用程序中,如静态库、动态库等。

4. 易于维护。

综上所述,SQLite的主要优势在于灵巧、快速和可靠性高。

SQLite的设计者们为了达到这一目标,在功能上作出了很多关键性的取舍,与此同时,也失去了一些对RDBMS关键性功能的支持,如高并发、细粒度访问控制(如行级锁)、丰富的内置函数、存储过程和复杂的SQL 语句等。

正是因为这些功能的牺牲才换来了简单,而简单又换来了高效性和高可靠性。

二、SQLite的主要优点:1. 一致性的文件格式:在SQLite的官方文档中是这样解释的,我们不要将SQLite与Oracle或PostgreSQL去比较,而是应该将它看做fopen和fwrite。

与我们自定义格式的数据文件相比,SQLite不仅提供了很好的移植性,如大端小端、32/64位等平台相关问题,而且还提供了数据访问的高效性,如基于某些信息建立索引,从而提高访问或排序该类数据的性能,SQLite提供的事务功能,也是在操作普通文件时无法有效保证的。

2. 在嵌入式或移动设备上的应用:由于SQLite在运行时占用的资源较少,而且无需任何管理开销,因此对于PDA、智能手机等移动设备来说,SQLite的优势毋庸置疑。

3. 内部数据库:在有些应用场景中,我们需要为插入到数据库服务器中的数据进行数据过滤或数据清理,以保证最终插入到数据库服务器中的数据有效性。

SQLite的介绍操作Sqlite具体实例

SQLite的介绍操作Sqlite具体实例

SQLite的介绍操作Sqlite具体实例1.SQLite简介SQLite是⼀款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计⽬标是嵌⼊式的,⽽且⽬前已经在很多嵌⼊式产品中使⽤了它,它占⽤资源⾮常的低,在嵌⼊式设备中,可能只需要⼏百K的内存就够了。

它能够⽀持 Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语⾔相结合,⽐如Tcl、PHP、Java、C++、.Net等,还有ODBC接⼝,同样⽐起 Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度⽐他们都快。

2.SQLite的特点:轻量级SQLite和C/S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。

使⽤SQLite⼀般只需要带上它的⼀个动态库,就可以享受它的全部功能。

⽽且那个动态库的尺⼨也挺⼩,以版本3.6.11为例,Windows下487KB、Linux下347KB。

不需要"安装"SQLite的核⼼引擎本⾝不依赖第三⽅的软件,使⽤它也不需要"安装"。

有点类似那种绿⾊软件。

单⼀⽂件数据库中所有的信息(⽐如表、视图等)都包含在⼀个⽂件内。

这个⽂件可以⾃由复制到其它⽬录或其它机器上。

跨平台/可移植性除了主流操作系统 windows,linux之后,SQLite还⽀持其它⼀些不常⽤的操作系统。

弱类型的字段同⼀列中的数据可以是不同类型开源3.SQLite数据类型⼀般数据采⽤的固定的静态数据类型,⽽SQLite采⽤的是动态数据类型,会根据存⼊值⾃动判断。

SQLite具有以下五种常⽤的数据类型:NULL: 这个值为空值VARCHAR(n):长度不固定且其最⼤长度为 n 的字串,n不能超过 4000。

CHAR(n):长度固定为n的字串,n不能超过 254。

INTEGER: 值被标识为整数,依据值的⼤⼩可以依次被存储为1,2,3,4,5,6,7,8.REAL: 所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号.TEXT: 值为⽂本字符串,使⽤数据库编码存储(TUTF-8, UTF-16BE or UTF-16-LE).BLOB: 值是BLOB数据块,以输⼊的数据格式进⾏存储。

sqlite 用法

sqlite 用法

sqlite 用法SQLite是一种轻型关系型数据库管理系统,它是一个C语言库,实现了自给自足、无服务器、零配置、事务性的SQL数据库引擎。

SQLite不需要单独的服务器进程或操作系统支持,这使它成为嵌入式数据库的理想选择,也适用于客户端/服务器的数据库应用程序。

SQLite的文件格式跨平台,可以在不同的操作系统中共享。

SQLite 的应用非常广泛,包括Android、iOS、Windows、Linux等系统中的各种应用程序和网站。

SQLite的使用非常简单,只需要引入SQLite的头文件,然后使用相应的API即可实现数据库的连接、数据的插入、查询、更新和删除等操作。

SQLite的API包含在sqlite3.h头文件中,其中最常用的API包括:sqlite3_open()用于连接数据库,sqlite3_exec()用于执行SQL语句,sqlite3_prepare_v2()用于准备SQL语句,sqlite3_step()用于执行SQL语句的下一步,sqlite3_finalize()用于释放已准备好的SQL语句,sqlite3_close()用于关闭数据库连接等。

在SQLite中,数据存储在表中,每个表由一组列组成。

表的创建可以使用SQL语句CREATE TABLE,格式为:CREATE TABLE 表名 (列1名列1类型, 列2名列2类型, …) 例如:CREATE TABLE user (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)这个语句创建了一个名为“user”的表,包含三列:id、name和age。

其中,id列为主键,类型为INTEGER,name列和age列分别为TEXT和INTEGER类型。

表的数据可以通过INSERT INTO语句进行插入,例如:INSERT INTO user (name, age) VALUES ('Tom', 20) 这个语句向user表中插入了一条记录,name列的值为“Tom”,age列的值为20。

sqlite 的类型

sqlite 的类型

sqlite 的类型
SQLite是一种轻量级的关系型数据库管理系统,它支持多种数据类型,这些数据类型包括:
1. NULL,表示一个值是空的。

2. INTEGER,用于存储整数值,可以是1、2、3等等,也可以是负数。

3. REAL,用于存储浮点数值,例如3.14、-0.5等。

4. TEXT,用于存储文本字符串,比如"Hello, World"。

5. BLOB,用于存储二进制数据,比如图片、音频、视频等。

除了基本的数据类型外,SQLite还支持日期和时间函数,以及对日期和时间的存储和计算。

这些数据类型的灵活性使得SQLite能够满足各种不同类型的数据存储需求。

另外,SQLite是一种动态类型的数据库,也就是说在SQLite
中,每个值都具有类型,但是数据类型是可以动态改变的。

这意味
着你可以在同一列中存储不同类型的数据,虽然这种做法并不常见,但是在某些情况下是有用的。

总的来说,SQLite的数据类型丰富多样,能够满足各种不同的
数据存储需求,同时也具有一定的灵活性,使得它成为了一个受欢
迎的数据库管理系统。

sqlite的缓存机制

sqlite的缓存机制

sqlite的缓存机制SQLite 的缓存机制是其性能优化的关键部分,主要涉及以下几个方面:1.Page Cache (也称为Pager):o SQLite 使用一个称为“Page Cache”的内存区域来存储数据库文件的数据。

这个缓存区域用于存储从磁盘读取的数据页面。

o每个SQLite 数据库都有一个或多个Pager 对象,这些对象管理着数据库文件的读写操作。

o Pager 负责缓存、回收和重新使用内存中的数据页面。

它还负责将数据从缓存同步回磁盘文件。

2.Page Size:o SQLite 的默认页面大小是4096 字节,但可以通过PRAGMA page_size命令或sqlite3_config()函数进行调整。

o页面大小会影响缓存的效率,因为如果一个操作涉及多个页面,则较大的页面大小可能会减少页面切换的次数。

3.Shared Cache Model:o SQLite 支持多个数据库共享同一个Page Cache。

这是通过称为“Shared Page Cache”的机制实现的。

o在多线程或多进程环境中,多个数据库可以共享相同的内存缓存,这有助于减少内存使用和提高性能。

4.WAL Mode (Write-Ahead Logging):o从SQLite 3.7.0 开始,WAL 模式成为默认的事务模式。

在WAL 模式下,写操作首先记录在日志文件中,然后在稍后的某个时间点应用到主数据库文件。

o WAL 模式的好处是允许多个读取操作并发进行,而不会与写入操作冲突。

这有助于提高并发性能。

5.Synchronous Write:o通过使用PRAGMA synchronous命令或sqlite3_config()函数,可以调整同步写入级别。

默认情况下,SQLite 是同步的,这意味着在写入操作完成之前,它会等待磁盘I/O 完成。

这样可以保证数据完整性,但可能会影响性能。

o通过降低同步级别,SQLite 可以更快地写入数据,但可能会牺牲一些数据完整性。

SQLite数据库利用详解程序

SQLite数据库利用详解程序

1.SQLite数据库的优势:1.1 轻量级SQLite和C/S模式的数据库软件不同,它是进程内的数据库引擎,利用SQLite一样只需要带上它的一个动态库。

以版本为例,Windows下487KB、Linux下347KB。

1.2 绿色软件它的核心引擎本身不依托第三方的软件1.3 单一文件确实是数据库中所有的信息(比如表、视图、触发器、等)都包括在一个文件内。

那个文件能够copy到其它目录或其它机械上,也照用不误。

CSV也是单一文件格式。

它本身确实是用来表示二维的数据信息的。

一个CSV文件能够明白得为数据库的一张表。

CSV的缺点要紧在于:不便于存储非文本的数据信息(比如BLOB类型的信息);若是需要同时存储多张表的信息,就需要对应有多个CSV文件(文件一多,就嫌麻烦)。

1.4 跨平台/可移植性除主流操作系统,SQLite还支持了很多其他的操作系统。

如对很多嵌入式系统(比如Android、Windows Mobile、Symbin、Palm、VxWorks等)的支持。

Access数据库最要紧的缺点确实是不能跨平台。

另外还有几个小缺点:文件大小有限制(2GB)、不支持内存数据库。

1.5 内存数据库(in-memory database)现在内存愈来愈廉价,很多一般PC都开始以GB为单位来衡量内存(效劳器就更甭提了)。

这时,SQLite的内存数据库特性就越发显得好用。

SQLite的API不区分当前操作的数据库是在内存仍是在文件(关于存储介质是透明的)。

因此若是你感觉磁盘I/O有可能成为瓶颈的话,能够考虑切换为内存方式。

切换的时候,操作SQLite的代码大体不用大改,只要在开始时把文件Load到内存,终止时把内存的数据库Dump回文件就OK了。

1.6 编程语言接口由于SQLite本身是C写的,它自带的API也是C接口的。

2.SQLite数据库的缺点:2.1并发访问的锁机制SQLite在并发(包括多进程和多线程)读写方面的性能不太理想。

sqlite原理

sqlite原理

sqlite原理
SQLite是一种轻量级的关系型数据库管理系统。

它被设计成具有嵌入式数据库引擎的功能,因此它可以被集成到其他应用程序中作为一个本地库使用。

SQLite不需要独立的服务器进程或系统守护进程,因为它是一个自包含的库,并且可以直接访问磁盘上的数据文件。

SQLite使用了一种称为B树的数据结构来存储数据。

B树是一种自平衡的树形数据结构,它允许在平均情况下快速的查找、插入和删除操作。

SQLite的B树是一种多路平衡搜索树,它可以有多个子节点,这使得它可以在一次磁盘访问中处理多个数据项。

SQLite的数据文件是一个二进制文件,它包含一个或多个B树,每个B树对应一个表或索引。

每个表或索引的数据都被存储在一个或多个B树中,并且被组织成一系列的页。

每个页都是一个固定大小的块,通常为4KB。

页可以是数据页,也可以是索引页。

SQLite的查询处理器使用了一种称为虚拟机的技术。

查询处理器首先将SQL语句转换成一系列的操作码,然后将这些操作码输入到虚拟机中执行。

虚拟机将执行一个或多个子程序,它们会访问数据库的B树,从而完成查询操作。

SQLite的事务处理使用了基于日志的技术。

当一个事务被提交时,SQLite会将所有对数据的修改记录到一个日志文件中。

如果系统崩溃或出现其他错误,SQLite可以使用这个日志文件来恢复数据库的状态。

总之,SQLite是一种轻量级的关系型数据库管理系统,它使用B
树数据结构来存储数据,使用虚拟机技术来执行查询操作,使用基于日志的技术来处理事务。

它的特点是体积小、速度快、易于使用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

浅谈SQLite:实现与应用1、前言有一些日子没有仔细关注SQLite了,今天打开其主页,发现其最新的版本已经是3.6.22了,更让我惊喜的是它的用户越来越多,而且邮件列表的关注者也越来越多,突然觉得自己已经太old了。

惊喜的同时,不得不聊上几句了。

首先,来看看都有哪些人在使用SQLite,主页上列举一长串NB的用户,其中不乏像Adobe,Apple,Firefox,甚至连google,Microsoft,SUN这样的用户。

Firefox:这是我的机器上V3.5.7安装目录下的文件:可以发现用的SQLite 3.6.16.1。

据说,Google在它的Desktop for Mac,Google Gears,以及Android,甚至Chrome 中都用到SQLite,而且,Google的工程师对SQLite的全文检索功能作了很大的贡献(contribution)。

还有Apple,Micorsoft,SUN等等,这里就不列举了。

详细见/famous.html。

有这些公司的参与,对SQLite的发展应该有很大的帮助,尤其是像Google这样的用户。

2、实现与应用下面从实现及应用的角度来谈谈SQLite,先看看SQLite的特点(功能)吧。

特点简单(simple):SQLite是一个非常轻量级自包含(lightweight and self-contained)的DBMS:一个头文件,一个动态库文件,你就拥有了关系数据库的所有功能了。

简单,是SQLite最明显的哲学。

它提供的API少而简单。

只需要一个DLL文件,你的程序马上就拥有了一个功能强大的数据库引擎,这是一件很美妙的事。

小巧(small):我用VS 2005在Windows下编译的3.6.11,Release版为368K,用时不到20秒——而编译MySQL时,要花上几分钟。

而当我插入10000条int数据时,内存开销660K,磁盘开销92K。

事务(transaction):事务是现代商业数据处理系统最基本的要求,而Access,不论是在可执行文件大小(看了一下Access2003的可执行文件大小为6.32M,两者不是一个量级),还是事务特性,都是不能和SQLite 相比的。

并发性(Concurrency):由于SQLite通过OS的文件锁来实现库级锁,粒度很大,但是,它通过一些复杂特殊的处理(具体可以参见分析系列),尽量的提升了读写的并发度。

如果你还有担心,你可以看看这篇文章:/database/sqlite_cms.html。

SQL92:SQLite支持绝大部分的标准SQL语句,你只需要几百K的空间,就可以换来需要上百兆的通用DBMS几乎所有操作了。

方便(Convenience):如果你的程序要使用SQLite,只需要将拷贝你的程序目录即可。

开源(Opensource):这是它最强大的地方。

开源,意味着你可以品读它的源码,你可以随时修改它,加入你自己的特性,而这一切完全免费的。

开源,是一种精神。

实现部分好了,现在从实现的角度来谈谈个人体会,这也是我比较关注的。

SQLite是一款优秀的嵌入式数据库管理系统,这里有两层含义:一是它经常作为动态库嵌入到应用程序;另外一方面它通常用于嵌入式设备或其它要求较低的桌面应用。

如果把它作为内存数据库,个人觉得不是很适合。

毕竟,它的写并发性不是很好,此时,TimesTen也许会更好,Berkey DB也许是一个不错的选择。

SQLite这样的嵌入式数据库与主存数据库的应用场景、实现以及对资源的需求都是不一样的。

(1)事务处理事务的核心问题有两个:并发控制和恢复。

解决了并发控制和恢复问题的系统,就能允许它的用户假设程序是原子的(atomically)执行的——好像没有其它的程序同时执行;而且是可靠的(reliably)——不会产生失败。

原子性和可靠性的抽象,则称为事务(transaction)。

其实,事务并不是DBMS的专利,任何分布式系统,都面对并发和恢复问题,而解决的方法就是事务,只不过,我们更常听到DBMS中的事务。

并发控制保证事务的原子执行,它使得交错执行的事务看起来是一个接一个的顺序执行的,完全没有交错执行。

如果交错执行的结果与顺序执行的结果一致,则称为串行化(serializable)。

恢复使得数据库仅仅包含那些正常完成的事务的结果。

如果事务在执行的过程中发生错误,不能继续进行,恢复算法必须清除部分完成事务产生的影响。

并发控制SQLite只支持库级锁,库级锁意味着什么?——意味着同时只能允许一个写操作,也就是说,即事务T1在A表插入一条数据,事务T2在B表中插入一条数据,这两个操作不能同时进行,即使你的机器有100个CPU,也无法同时进行,而只能顺序进行。

表级都不能并行,更别说元组级了——这就是库级锁。

但是,SQLite尽量延迟申请X锁,直到数据块真正写盘时才申请X锁,这是非常巧妙而有效的。

恢复SQLite的恢复技术是影子分页技术(shadow paging)技术的典型代表。

DBMS的常用恢复技术有影子分页技术与基于日志的技术,前者在早其数据库管理系统中用到,比如System R,现代DBMS中已经很难见到它的身影了。

影子分页技术与基于日志技术相比,优点是实现简单,消除了写日志记录的开销,恢复的速度也快(不需要redo和undo)。

影子分页的缺点就是事务提交时要输出多个块,这使得提交的开销很大,而且以块为单位,很难应用到允许多个事务并发执行的情况——这是它致命的缺点。

(2)查询处理SQLite的查询处理本质上就是一个SQL编译器和一个虚拟机。

而实现这些功能只用了十多个文件,整个实现实现简单而有效,但是也存在一些问题。

首先,SQLite字典数据很简单,实际上它的字典就一个表sqlite_mater,所有的信息都是通过对sqlite_master 中SQL语句进行解析获取的,而解析一个SQL语句,都需要进行词法分析、语法分析、甚至虚拟机代码的生成。

而这一过程是很需要时间的,而且,查询计划也没有重用。

其次,查询优化还比较简单,特别是连接操作,只通过循环来做(MySQL也一样)。

但是,仅仅数万代码,我们不能对它要求太苛求。

(3)存储模型SQLite的文件物理上被划分成相同大小的块;逻辑上划分成一些B-Tree——每个表对应一个B-Tree。

而没有像Oracle,或者InnoDB对数据块进行复杂的逻辑组织,这种按需分配数据块的做法必然影响磁盘的读写性能。

不过,归根到底,还是源于它的应用场景。

(4)缓冲区管理Buffer的管理对于DBMS,无疑是非常重要的,SQLite在其它方面做得比较简单,但是在缓冲区管理这一块,它还是做足了功夫。

SQLite采用DBMS常用的LRU算法。

更值得一提的是,在较新的版本中,SQLite采用和虚拟文件系统的类似的方式,实现了让默认缓冲区管理子系统可以很容易的切换成其它的缓冲区管理算法,这是非常灵活的。

(5)I/OSQLite采用简单的阻塞I/O,较新的版本将异步I/O作为可选的扩展,但是,由于SQLite没有日志,所以,事务中ACID中的D,就无法保证,所以,如果你的数据很关键,请不要用SQLite的异步I/O。

另一方面,实际上,很多嵌入式操作系统,比如Windows CE 并不支持异步I/O(不过,这可以通过多线程加以解决)。

但是,这些“缺点”并不是SQLite的缺点,相对于通过DBMS,恰恰是它的优点,这样的实现简单,而且对资源的需求较低。

对嵌入式设备、或者那些要求较低的应用,已经足够,足够就好。

应用场景嵌入式设备:这应该是SQLite应用的主要场景,很多公司都在他们的嵌入式应用程序中使用SQLite,其中不乏google的Android。

桌面应用:如果你已经厌恶了fopen,fread,fwrite这些函数,SQLite是你不错的选择,它接口简单,而且支持事务。

前些天无意中下了一个cookie清除软件——CookieCrumbler,打开一看,发现里面竟然有一个sqlite3.dll,着实让我震惊了一把。

Websites:如果你的站点的访问量、数据量小的个人站点,SQLite可以代替开销较大的MySQL和繁杂的Access。

最近因为学校那个项目,也在搞数据库方面的东西,以前也用过SQLITE的东西,拿来复习下Sqlite是一个面向嵌入式系统的数据库,编译完成只有200K,同时支持2T 的数据记录。

对于嵌入式设备是一个很好的数据库引擎。

本文通过一个小例子说明如何在C与C++调用Sqlite API完成数据库的创建、插入数据与查询数据。

本文的开发环境为(Redhat9.0 + Qtopia2.1.2 + Sqlite3) 安装Sqlite3:从上下载Sqlite3.2.2运源代码,依照Readme中的步骤: tar xzf sqlite3.2.2.tar.gzmkdir bldcd bld../sqlite3.2.2/configuremakemake install然后在shell下运行 sqlite3 test.db命令可以检验是否已经安装成功。

创建数据库:sqlite3 *pDB = NULL;char * errMsg = NULL;//打开一个数据库,如果改数据库不存在,则创建一个名字为databaseName的数据库文件int rc = sqlite3_open(databaseName, &pDB);if(rc){cout << " Open the database " << databaseName << " failed" << endl; }//如果创建成功,添加表else{cout << "create the database successful!" << endl;//creat the tableint i;for(i=1; i<nTableNum; i++){}//插入一个表,返回值为SQLITE_OK为成功,否则输出出错信息//函数参数:第一个为操作数据库的指针,第二句为SQL命令字符串//第三个参数为callback函数,这里没有用,第四个参数为callback 函数//中的第一个参数,第五个为出错信息rc = sqlite3_exec(pDB, "CREATE TABLE chn_to_eng(chinese QString, english QString)", 0, 0, &errMsg);if(rc == SQLITE_OK)cout << "create the chn_to_eng table successful!" << endl; elsecout << errMsg << endl;//同上,插入另一个表rc = sqlite3_exec(pDB, "CREATE TABLE eng_to_chn(english QString, chinese QString)", 0, 0, &errMsg);if(rc == SQLITE_OK)cout << "create the eng_to_chn table successful!" << endl; elsecout << errMsg << endl;}、、、、、、//往表中添加数据char chn[]="...";char eng[]="...";char value[500];//定义一条参数SQL命令,其中chn,eng为需要插入的数据sprintf(value, "INSERT INTO chn_to_eng(chinese, english) VALUES('%s', '%s')", chn, eng);//use the SQLITE C/C++ API to create and adjust a database.rc = sqlite3_exec(pDB,value,0, 0, &errMsg);//查询一条记录char value[500];//定义一条查询语句,其中条件为当english为target时的中文记录//print_result_cb为callback函数,在其中可以得到查询的结果,具体见下文sprintf(value, "SELECT chinese FROM eng_to_chn where english='%s' ", target);rc = sqlite3_exec(pDB,value,print_result_cb, 0, &errMsg);if(rc == SQLITE_OK){// #ifdef_debugcout << "select the record successful!" << endl;// #endif}else{// #ifdef_debugcout << errMsg << endl;// #endifreturn false;}.......}//callback回调函数print_result_cb的编写,其中data为sqlite3_exec 中的第四个参数,第二个参数是栏的数目,第三个是栏的名字,第四个为查询得到的值得。

相关文档
最新文档