sqlite3-基础教程

合集下载

sqlite3 用法

sqlite3 用法

sqlite3 用法以下是SQLite3的基本用法:1. 查看版本信息:在终端中输入“sqlite3 -version”。

2. 进入sqlite3:直接输入“sqlite3”并回车,和进入python一样。

3. 退出sqlite3:输入“.quit”。

4. 创建数据库:在shell中输入“sqlite3 ”(注意不要在sqlite3环境中输入)。

这将在当前目录下创建一个名为“”的数据库文件。

创建数据库后,不能直接退出,否则可能无法创建数据库文件。

5. 查看数据库列表:输入“.databases”。

6. 删除数据库:直接删除目录下的数据库文件。

7. 选择数据库:输入“.open +数据库名”。

如果数据库存在,将选择该数据库;如果不存在,系统将创建一个名为“”的数据库,并选中它。

8. 创建表(需要先选中数据库):输入“CREATE TABLE +表名(列定义)”。

例如,“CREATE TABLE Student(ID INT PRIMARY KEY NOT NULL, NAME VARCHAR(20), AGE INT)”。

9. 查看数据库中有哪些表:输入“.tables”。

10. 查看表的字段信息:输入“.schema + 表名”。

11. 删除指定的表:输入“DROP TABLE + 表名”。

12. 其他增删查改操作与MySQL中一致。

例如,查找数据:“SELECT FROM student WHERE ID=1;”。

以上是SQLite3的基本用法,具体操作可能因版本或特定需求而有所不同。

建议查阅SQLite3的官方文档或相关资料以获取更全面的信息。

sqlite3的基本使用以及封装使用

sqlite3的基本使用以及封装使用

sqlite3的基本使⽤以及封装使⽤1基本使⽤1.打开数据库int sqlite3_open(const char *filename, // 数据库的⽂件路径sqlite3 **ppDb // 数据库实例);2.执⾏任何SQL语句int sqlite3_exec(sqlite3*, // ⼀个打开的数据库实例const char *sql, // 需要执⾏的SQL语句int (*callback)(void*,int,char**,char**), // SQL语句执⾏完毕后的回调void *, // 回调函数的第1个参数char **errmsg // 错误信息);3.检查SQL语句的合法性(查询前的准备)int sqlite3_prepare_v2(sqlite3 *db, // 数据库实例const char *zSql, // 需要检查的SQL语句int nByte, // SQL语句的最⼤字节长度sqlite3_stmt **ppStmt, // sqlite3_stmt实例,⽤来获得数据库数据const char **pzTail);4.查询⼀⾏数据int sqlite3_step(sqlite3_stmt*); // 如果查询到⼀⾏数据,就会返回SQLITE_ROW5.利⽤stmt获得某⼀字段的值(字段的下标从0开始)double sqlite3_column_double(sqlite3_stmt*, int iCol); // 浮点数据int sqlite3_column_int(sqlite3_stmt*, int iCol); // 整型数据sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol); // 长整型数据const void *sqlite3_column_blob(sqlite3_stmt*, int iCol); // ⼆进制⽂本数据const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol); // 字符串数据1创建⼀个model类,.h⽂件#import <Foundation/Foundation.h>@interface IWStudent : NSObject@property (nonatomic, assign) int ID;@property (nonatomic, copy) NSString *name;@property (nonatomic, assign) int age;@end.m⽂件#import"IWStudent.h"@implementation IWStudent@end2创建⼯具类....封装⽅法.h⽂件#import <Foundation/Foundation.h>@class IWStudent;@interface IWStudentTool : NSObject/*** 添加学⽣** @param student 需要添加的学⽣*/+ (BOOL)addStudent:(IWStudent *)student;/*** 获得所有的学⽣** @return 数组中装着都是IWStudent模型*/+ (NSArray *)students;/*** 根据搜索条件获得对应的学⽣** @param condition 搜索条件*/+ (NSArray *)studentsWithCondition:(NSString *)condition;@end.m⽂件#import"IWStudentTool.h"#import"IWStudent.h"#import <sqlite3.h>@implementation IWStudentTool// static的作⽤:能保证_db这个变量只被IWStudentTool.m直接访问static sqlite3 *_db;+ (void)initialize{// 0.获得沙盒中的数据库⽂件名NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"student.sqlite"]; // 1.创建(打开)数据库(如果数据库⽂件不存在,会⾃动创建)int result = sqlite3_open(filename.UTF8String, &_db);if (result == SQLITE_OK) {NSLog(@"成功打开数据库");// 2.创表const char *sql = "create table if not exists t_student (id integer primary key autoincrement, name text, age integer);";char *errorMesg = NULL;int result = sqlite3_exec(_db, sql, NULL, NULL, &errorMesg);if (result == SQLITE_OK) {NSLog(@"成功创建t_student表");} else {NSLog(@"创建t_student表失败:%s", errorMesg);}} else {NSLog(@"打开数据库失败");}}+ (BOOL)addStudent:(IWStudent *)student{NSString *sql = [NSString stringWithFormat:@"insert into t_student (name, age) values('%@', %d);", , student.age];char *errorMesg = NULL;int result = sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errorMesg);return result == SQLITE_OK;}+ (NSArray *)students{// 0.定义数组NSMutableArray *students = nil;// 1.定义sql语句const char *sql = "select id, name, age from t_student;";// 2.定义⼀个stmt存放结果集sqlite3_stmt *stmt = NULL;// 3.检测SQL语句的合法性int result = sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL);if (result == SQLITE_OK) {NSLog(@"查询语句是合法的");students = [NSMutableArray array];// 4.执⾏SQL语句,从结果集中取出数据while (sqlite3_step(stmt) == SQLITE_ROW) { // 真的查询到⼀⾏数据// 获得这⾏对应的数据IWStudent *student = [[IWStudent alloc] init];// 获得第0列的idstudent.ID = sqlite3_column_int(stmt, 0);// 获得第1列的nameconst unsigned char *sname = sqlite3_column_text(stmt, 1); = [NSString stringWithUTF8String:(const char *)sname];// 获得第2列的agestudent.age = sqlite3_column_int(stmt, 2);// 添加到数组[students addObject:student];}} else {NSLog(@"查询语句⾮合法");}return students;}+ (NSArray *)studentsWithCondition:(NSString *)condition{// 0.定义数组NSMutableArray *students = nil;// 1.定义sql语句const char *sql = "select id, name, age from t_student where name like ?;";// 2.定义⼀个stmt存放结果集sqlite3_stmt *stmt = NULL;// 3.检测SQL语句的合法性int result = sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL);if (result == SQLITE_OK) {NSLog(@"查询语句是合法的");students = [NSMutableArray array];// 填补占位符的内容NSString *newCondition = [NSString stringWithFormat:@"%%%@%%", condition]; // NSLog(@"%@", newCondition);sqlite3_bind_text(stmt, 1, newCondition.UTF8String, -1, NULL);// 4.执⾏SQL语句,从结果集中取出数据while (sqlite3_step(stmt) == SQLITE_ROW) { // 真的查询到⼀⾏数据// 获得这⾏对应的数据IWStudent *student = [[IWStudent alloc] init];// 获得第0列的idstudent.ID = sqlite3_column_int(stmt, 0);// 获得第1列的nameconst unsigned char *sname = sqlite3_column_text(stmt, 1); = [NSString stringWithUTF8String:(const char *)sname];// 获得第2列的agestudent.age = sqlite3_column_int(stmt, 2);// 添加到数组[students addObject:student];}} else {NSLog(@"查询语句⾮合法");}return students;}@end2.封装为⼯具类。

sqlites3 中文手册

sqlites3 中文手册

sqlites3 中文手册
SQLite是一种轻量级的数据库引擎,它是一种自包含、零配置的、事务性的SQL数据库引擎。

SQLite的中文手册包含了该数据库
引擎的详细信息,包括其功能、语法、用法等方面的介绍。

SQLite
中文手册通常包括以下内容:
1. 数据库的创建和连接,介绍如何在SQLite中创建数据库文件,并建立与数据库的连接。

2. 数据表的操作,包括创建表、插入数据、更新数据、删除数
据等操作。

3. 查询语句,介绍SQLite中常用的查询语句,包括条件查询、排序、分组等操作。

4. 事务处理,介绍SQLite中的事务处理机制,包括事务的开始、提交和回滚等操作。

5. 索引和视图,介绍SQLite中索引和视图的创建和使用方法。

6. 数据类型,介绍SQLite支持的数据类型,如整数、文本、日期时间等。

7. 函数和触发器,介绍SQLite中的内置函数和触发器的使用方法。

8. 性能优化,介绍SQLite中的性能优化技巧,包括索引的优化、查询优化等。

总的来说,SQLite中文手册涵盖了数据库的基本操作、高级功能和性能优化等方面的内容,对于想要深入了解和使用SQLite的开发人员来说是非常有用的参考资料。

希望这些信息能够帮助你更好地理解SQLite数据库引擎。

sqlite3使用方法

sqlite3使用方法

sqlite3使用方法SQLite是一个轻量级的关系型数据库管理系统。

它无需服务器,仅仅依赖于本地文件来存储数据,因此非常适合作为嵌入式数据库使用。

下面介绍SQLite3的一些基本使用方法:1. 打开SQLite3数据库:在终端中输入以下命令即可打开数据库:```sqlite3 数据库名```如果数据库不存在,会自动创建一个新的数据库。

2. 创建数据表在SQLite中,数据表可以通过一个CREATE TABLE语句来创建。

以下是一个示例:```CREATE TABLE 表名 (列1 数据类型,列2 数据类型,列3 数据类型,.....);```其中,列1、列2、列3等为表的列名,可自定义命名,而数据类型则是指该列保存的数据类型,如text表示字符串类型,integer代表整数类型,real代表实数类型等。

3. 插入数据可以使用INSERT语句来向数据表中插入数据。

以下是一个示例:```INSERT INTO 表名 (列1, 列2, 列3, ...) VALUES (值1, 值2, 值3, ...);```其中,列1、列2、列3等为数据表的列名,可自定义命名,而值1、值2、值3等为需要插入的值。

4. 查询数据SQLite中可以使用SELECT语句来查询数据。

以下是一个示例:```SELECT 列1, 列2, ... FROM 表名 WHERE 条件;```其中,列1、列2等为需要查询的列名,可自定义,表名为要查询的数据表名,而条件则为查询的条件,如“列 = 值”等。

5. 更新数据可以使用UPDATE语句来更新数据。

以下是一个示例:```UPDATE 表名 SET 列1 = 值1, 列2 = 值2, ... WHERE 条件;```其中,表名为要更新的数据表名,列1、列2等为需要更新的列名,值1、值2等为需要更新的值,条件则为更新的条件。

6. 删除数据可以使用DELETE语句来删除数据。

以下是一个示例:```DELETE FROM 表名 WHERE 条件;```其中,表名为要删除的数据表名,条件则为删除的条件。

sqlite3-基础教程

sqlite3-基础教程
3
第 4 个参数 void * 是你所提供的指针,你可以传递任何一个指针参数到这里,这个参数最终会 传到回调函数里面,如果不需要传递指针给回调函数,可以填 NULL。等下我们再看回调函数的写 法,以及这个参数的使用。 第 5 个参数 char ** errmsg 是错误信息。 注意是指针的指针。 sqlite3 里面有很多固定的错误信息。 执行 sqlite3_exec 之后,执行失败时可以查阅这个指针(直接 printf(“%s\n”,errmsg))得到一串字 符串信息,这串信息告诉你错在什么地方。sqlite3_exec 函数通过修改你传入的指针的指针,把你提 供的指针指向错误提示信息,这样 sqlite3_exec 函数外面就可以通过这个 char*得到具体错误提示。 说明:通常,sqlite3_callback 和它后面的 void * 这两个位置都可以填 NULL。填 NULL 表示 你不需要回调。比如你做 insert 操作,做 delete 操作,就没有必要使用回调。而当你做 select 时, 就要使用回调,因为 sqlite3 把数据查出来,得通过回调告诉你查出了什么数据。 i.2 exec 的回调 typedef int (*sqlite3_callback)(void*,int,char**, char**); 你的回调函数必须定义成上面这个函数的类型。下面给个简单的例子: //sqlite3 的回调函数 // sqlite 每查到一条记录,就调用一次这个回调 int LoadMyInfo( void * para, int n_column, char ** column_value, char ** column_name ) { //para 是你在 sqlite3_exec 里传入的 void * 参数 //通过 para 参数,你可以传入一些特殊的指针(比如类指针、结构指针) ,然后在这里面强制转 换成对应的类型(这里面是 void*类型,必须强制转换成你的类型才可用) 。然后操作这些数据 //n_column 是这一条记录有多少个字段 (即这条记录有多少列) // char ** column_value 是个关键值,查出来的数据都保存在这里,它实际 上是个 1 维数组(不要以为是 2 维数组) ,每一个元素都是一个 char * 值,是一个字段内容(用 字符串来表示,以\0 结尾) //char ** column_name 跟 column_value 是对应的,表示这个字段的字段名称 //这里,我不使用 para 参数。忽略它的存在. int i; printf( “记录包含 %d 个字段\n”, n_column ); for( i = 0 ; i < n_column; i ++ ) { printf( “字段名:%s > 字段值:%s\n”, column_name[i], column_value[i] ); } printf( “\n“ ); return 0; } int main( int , char ** ) { sqlite3 * db; int result; char * errmsg = NULL; result = sqlite3_open( “c:\\Dcg_database.db”, &db ); if( result != SQLITE_OK ) {

易语言外部数据库sqlite3教程

易语言外部数据库sqlite3教程

易语言外部数据库sqlite3教程===========================================================第一部分 sqlite基础----------------------------------------------------------- 1、什么是sqlietSQLite是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。

SQLite是一个增长最快的数据库引擎,这是在普及方面的增长,与它的尺寸大小无关。

SQLite 源代码不受版权限制。

SQLite与其他SQL数据库不同,SQLite没有单独的服务器进程。

它直接读取和写入普通磁盘文件。

具有多个表,索引,触发器和视图的完整SQL数据库包含在单个磁盘文件中。

-----------------------------------------------------------2、为什么要用 SQLite?➢不需要一个单独的服务器进程或操作的系统(无服务器的)。

➢SQLite 不需要配置,这意味着不需要安装或管理。

➢一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。

➢SQLite 是非常小的,是轻量级的,完全配置时小于400KiB,省略可选功能配置时小于250KiB。

➢SQLite 是自给自足的,这意味着不需要任何外部的依赖。

➢SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。

➢SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。

➢SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的API。

➢SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和Windows(Win32, WinCE, WinRT)中运行。

-----------------------------------------------------------3、常用易语言单机的、免费、轻量级数据库比较易语言自带数据库易数据库可以说不能称为数据库,它只是“表”,而且还是单张表,所以直接PASS掉。

PYTHONSQLITE3教程

PYTHONSQLITE3教程

PYTHONSQLITE3教程SQLite是一种轻量级的嵌入式数据库,以其高效性能和简单易用的特点而广受欢迎。

Python自带了sqlite3模块,可以用于使用SQLite数据库进行数据存储和操作。

本文将介绍如何在Python中使用sqlite3模块进行SQLite数据库的基本操作。

首先,我们需要导入sqlite3模块:```pythonimport sqlite3```接下来,我们可以使用`connect(`函数连接到一个SQLite数据库文件。

如果该文件不存在,`connect(`函数会自动创建一个新的数据库文件。

```pythonconn = sqlite3.connect('example.db')```在连接成功后,我们需要创建一个游标对象来执行SQL语句:```pythoncursor = conn.cursor```现在我们可以使用游标对象执行各种SQL语句,例如创建表、插入数据、查询数据等。

首先,让我们创建一个名为`employees`的表:```pythoncursor.execute('''CREATE TABLE IF NOT EXISTS employeesid INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL,age INTEGER,salary REAL''')```在以上SQL语句中,我们使用`CREATE TABLE`语句创建了一个名为`employees`的表,该表包含了`id`、`name`、`age`和`salary`四个字段。

接下来,让我们插入一些数据到该表中:```pythoncursor.execute("INSERT INTO employees (name, age, salary) VALUES ('John Doe', 30, 5000)")cursor.execute("INSERT INTO employees (name, age, salary) VALUES ('Jane Smith', 25, 4000)")```以上SQL语句分别将名为`John Doe`和`Jane Smith`的员工信息插入到`employees`表中。

python的sqlite3基础

python的sqlite3基础

python的sqlite3基础SQLite3是一个轻量级的嵌入式关系数据库。

它提供了一个简单易用的方式来在Python中操作数据库。

以下是在Python中使用SQLite3的一些基本操作:1. 导入sqlite3模块:pythonimport sqlite32. 连接到数据库:pythonconn = sqlite3.connect('database.db')这将会创建一个名为database.db的数据库文件,并与之建立连接。

如果该文件不存在,则会自动创建。

3. 创建一个游标:pythoncursor = conn.cursor()游标用于执行SQL查询和获取查询结果。

4. 执行SQL语句:可以使用游标的execute()方法执行SQL语句。

例如,创建一个名为table的表:pythoncursor.execute('''CREATE TABLE IF NOT EXISTS table (column1, column2, ...)''')5. 提交更改:在执行完所有修改后,需要调用连接对象的commit()方法来提交更改:pythonconnmit()6. 执行查询语句:使用游标的execute()方法来执行查询语句:pythoncursor.execute('''SELECT * FROM table''')然后使用游标的fetchone()或fetchall()方法来获取查询结果。

7. 关闭连接:在结束操作后,记得关闭连接:pythonconn.close()以上是SQLite3在Python中的一些基本操作。

通过使用这些方法,可以轻松地进行数据库的创建、表的创建、数据的插入、查询和更新等操作。

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

SQLITE3基础教程sqlite常量的定义:constSQLITE_OK = 0; 返回成功SQLITE_ERROR = 1; SQL错误或错误的数据库SQLITE_INTERNAL = 2; An internal logic error in SQLiteSQLITE_PERM = 3; 拒绝访问SQLITE_ABORT = 4; 回调函数请求中断SQLITE_BUSY = 5; 数据库文件被锁SQLITE_LOCKED = 6; 数据库中的一个表被锁SQLITE_NOMEM = 7; 内存分配失败SQLITE_READONL Y = 8; 试图对一个只读数据库进行写操作SQLITE_INTERRUPT = 9; 由sqlite_interrupt()结束操作SQLITE_IOERR = 10; 磁盘I/O发生错误SQLITE_CORRUPT = 11; 数据库磁盘镜像畸形SQLITE_NOTFOUND = 12; (Internal Only)表或记录不存在SQLITE_FULL = 13; 数据库满插入失败SQLITE_CANTOPEN = 14; 不能打开数据库文件SQLITE_PROTOCOL = 15; 数据库锁定协议错误SQLITE_EMPTY = 16; (Internal Only)数据库表为空SQLITE_SCHEMA = 17; 数据库模式改变SQLITE_TOOBIG = 18; 对一个表数据行过多SQLITE_CONSTRAINT = 19; 由于约束冲突而中止SQLITE_MISMATCH = 20; 数据类型不匹配SQLITE_MISUSE = 21; 数据库错误使用SQLITE_NOLFS = 22; 使用主机操作系统不支持的特性SQLITE_AUTH = 23; 非法授权SQLITE_FORMAT = 24; 辅助数据库格式错误SQLITE_RANGE = 25; 2nd parameter to sqlite_bind out of rangeSQLITE_NOTADB = 26; 打开的不是一个数据库文件SQLITE_ROW = 100; sqlite_step() has another row readySQLITE_DONE = 101; sqlite_step() has finished executing前序Sqlite3 的确很好用。

小巧、速度快。

但是因为非微软的产品,帮助文档总觉得不够。

这些天再次研究它,又有一些收获,这里把我对sqlite3 的研究列出来,以备忘记。

这里要注明,我是一个跨平台专注者,并不喜欢只用windows 平台。

我以前的工作就是为unix 平台写代码。

下面我所写的东西,虽然没有验证,但是我已尽量不使用任何windows 的东西,只使用标准 C 或标准C++。

但是,我没有尝试过在别的系统、别的编译器下编译,因此下面的叙述如果不正确,则留待以后修改。

下面我的代码仍然用VC 编写,因为我觉得VC是一个很不错的IDE,可以加快代码编写速度(例如配合Vassist )。

下面我所说的编译环境,是VC2003。

如果读者觉得自己习惯于unix 下用vi编写代码速度较快,可以不用管我的说明,只需要符合自己习惯即可,因为我用的是标准 C 或C++ 。

不会给任何人带来不便。

一、版本从 网站可下载到最新的sqlite 代码和编译版本。

我写此文章时,最新代码是3.3.17 版本。

很久没有去下载sqlite 新代码,因此也不知道sqlite 变化这么大。

以前很多文件,现在全部合并成一个sqlite3.c 文件。

如果单独用此文件,是挺好的,省去拷贝一堆文件还担心有没有遗漏。

但是也带来一个问题:此文件太大,快接近7万行代码,VC开它整个机器都慢下来了。

如果不需要改它代码,也就不需要打开sqlite3.c 文件,机器不会慢。

但是,下面我要写通过修改sqlite 代码完成加密功能,那时候就比较痛苦了。

如果个人水平较高,建议用些简单的编辑器来编辑,例如UltraEdit 或Notepad 。

速度会快很多。

二、基本编译这个不想多说了,在VC 里新建dos 控制台空白工程,把sqlite3.c 和sqlite3.h 添加到工程,再新建一个main.cpp 文件。

在里面写:extern "C"{#include "./sqlite3.h"};int main( int , char** ){return 0;}为什么要extern “C”?如果问这个问题,我不想说太多,这是C++的基础。

要在C++里使用一段C 的代码,必须要用extern “C”括起来。

C++跟C虽然语法上有重叠,但是它们是两个不同的东西,内存里的布局是完全不同的,在C++编译器里不用extern “C”括起C代码,会导致编译器不知道该如何为 C 代码描述内存布局。

可能在sqlite3.c 里人家已经把整段代码都extern “C”括起来了,但是你遇到一个.c 文件就自觉的再括一次,也没什么不好。

基本工程就这样建立起来了。

编译,可以通过。

但是有一堆的warning。

可以不管它。

三、SQLITE操作入门sqlite提供的是一些C函数接口,你可以用这些函数操作数据库。

通过使用这些接口,传递一些标准sql 语句(以char * 类型)给sqlite 函数,sqlite 就会为你操作数据库。

sqlite 跟MS的access 一样是文件型数据库,就是说,一个数据库就是一个文件,此数据库里可以建立很多的表,可以建立索引、触发器等等,但是,它实际上得到的就是一个文件。

备份这个文件就备份了整个数据库。

sqlite 不需要任何数据库引擎,这意味着如果你需要sqlite 来保存一些用户数据,甚至都不需要安装数据库(如果你做个小软件还要求人家必须装了sqlserver 才能运行,那也太黑心了)。

下面开始介绍数据库基本操作。

(1)基本流程i.1 关键数据结构sqlite 里最常用到的是sqlite3 * 类型。

从数据库打开开始,sqlite就要为这个类型准备好内存,直到数据库关闭,整个过程都需要用到这个类型。

当数据库打开时开始,这个类型的变量就代表了你要操作的数据库。

下面再详细介绍。

i.2 打开数据库int sqlite3_open( 文件名, sqlite3 ** );用这个函数开始数据库操作。

需要传入两个参数,一是数据库文件名,比如:c:\\DongChunGuang_Database.db。

文件名不需要一定存在,如果此文件不存在,sqlite 会自动建立它。

如果它存在,就尝试把它当数据库文件来打开。

二是sqlite3 **,即前面提到的关键数据结构。

这个结构底层细节如何,你不要关它。

函数返回值表示操作是否正确,如果是SQLITE_OK 则表示操作正常。

相关的返回值sqlite定义了一些宏。

具体这些宏的含义可以参考sqlite3.h 文件。

里面有详细定义(顺便说一下,sqlite3 的代码注释率自称是非常高的,实际上也的确很高。

只要你会看英文,sqlite 可以让你学到不少东西)。

下面介绍关闭数据库后,再给一段参考代码。

i.3 关闭数据库int sqlite3_close(sqlite3 *);前面如果用sqlite3_open 开启了一个数据库,结尾时不要忘了用这个函数关闭数据库。

下面给段简单的代码:extern "C"{#include "./sqlite3.h"};int main( int , char** ){sqlite3 * db = NULL; //声明sqlite关键结构指针int result;//打开数据库//需要传入db 这个指针的指针,因为sqlite3_open 函数要为这个指针分配内存,还要让db指针指向这个内存区result = sqlite3_open( “c:\\Dcg_database.db”, &db );if( result != SQLITE_OK ){//数据库打开失败return -1;}//数据库操作代码//…//数据库打开成功//关闭数据库sqlite3_close( db );return 0;}这就是一次数据库操作过程。

(2)SQL语句操作本节介绍如何用sqlite 执行标准sql 语法。

i.1 执行sql语句int sqlite3_exec(sqlite3*, const char *sql, sqlite3_callback, void *, char **errmsg );这就是执行一条sql 语句的函数。

第1个参数不再说了,是前面open函数得到的指针。

说了是关键数据结构。

第2个参数const char *sql 是一条sql 语句,以\0结尾。

第3个参数sqlite3_callback 是回调,当这条语句执行之后,sqlite3会去调用你提供的这个函数。

(什么是回调函数,自己找别的资料学习)第4个参数void * 是你所提供的指针,你可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,如果不需要传递指针给回调函数,可以填NULL。

等下我们再看回调函数的写法,以及这个参数的使用。

第5个参数char ** errmsg 是错误信息。

注意是指针的指针。

sqlite3里面有很多固定的错误信息。

执行sqlite3_exec 之后,执行失败时可以查阅这个指针(直接printf(“%s\n”,errmsg))得到一串字符串信息,这串信息告诉你错在什么地方。

sqlite3_exec函数通过修改你传入的指针的指针,把你提供的指针指向错误提示信息,这样sqlite3_exec函数外面就可以通过这个char*得到具体错误提示。

说明:通常,sqlite3_callback 和它后面的void * 这两个位置都可以填NULL。

填NULL表示你不需要回调。

比如你做insert 操作,做delete 操作,就没有必要使用回调。

而当你做select 时,就要使用回调,因为sqlite3 把数据查出来,得通过回调告诉你查出了什么数据。

i.2 exec 的回调typedef int (*sqlite3_callback)(void*,int,char**, char**);你的回调函数必须定义成上面这个函数的类型。

下面给个简单的例子://sqlite3的回调函数// sqlite 每查到一条记录,就调用一次这个回调int LoadMyInfo( void * para, int n_column, char ** column_value, char **column_name ){//para是你在sqlite3_exec 里传入的void * 参数//通过para参数,你可以传入一些特殊的指针(比如类指针、结构指针),然后在这里面强制转换成对应的类型(这里面是void*类型,必须强制转换成你的类型才可用)。

相关文档
最新文档