对SQLite的基本操作总结

SQLite提供了大量的C函数接口,你可以使用来操纵数据库,通过使用这些接口,通过一些标准的SQL语句(char *类型)对SQLite的功能,将操作sqlite数据库you.sqlite是MS的访问相同的。它是一个文件数据库。也就是说,数据库是一个文件。在这个数据库中,多个表可以建立索引,触发器等可以成立,但实际得到的是一个文件,这个文件的备份是整个database.sqlite备份不需要任何数据库引擎,这意味着如果你需要SQLite保存一些用户数据,你不甚至不需要安装数据库。

下面介绍数据库的基本操作。
1。基本过程
(1)关键数据结构:
最常用的SQLite是sqlite3 *型。从数据库开始,SQLite准备记忆这类到数据库关闭,整个过程需要使用。在打开数据库时,这种类型的变量代表你要操作的数据库。下面将详细介绍。
(2)打开数据库:
国际sqlite3_open(文件名,sqlite3 *);使用此函数来启动数据库操作。两参数需要通过,一是数据库文件的名称,如: testdatabase.db测试。
文件名不需要存在,如果文件不存在,SQLite会自动建立它。如果它存在,试图为一个数据库文件打开它。sqlite3 **参数是关键的数据结构,前面提到的。你不想关闭这个结构的底层细节。
函数返回值表示操作是否正确,如果是sqlite_ok,运行正常。相关的返回值sqlite定义了一些宏,这些宏的意义可以指SQLite3。h文件,它有一个详细的定义。
(3)关闭数据库:
国际sqlite3_close(sqlite3 *);如果数据库是开在前面,sqlite3_open,不要忘记关闭数据库这个函数结束时。
SQLite数据库操作实例
复制代码代码如下所示:
#包括, / sqlite3的。
int main(int,char **)
{
sqlite3 =空*分贝; / /指针键结构SQLite
返回结果;
这需要db指针指针,
因为 / /指针的内存分配的sqlite3_open功能,也让数据库指针的内存区
结果:sqlite3_open(。试验 testdatabase.db,DB); / /打开数据库
如果(结果)!= sqlite_ok)
{
返回1;数据库未打开
}
操作码数据库
…—
打开数据库
sqlite3_close(DB); / /关闭数据库
返回0;
}

这是一个数据库操作过程。

2、SQL语句操作(如何与SQLite的执行标准的SQL语法)
(1)执行SQL语句:int sqlite3_exec(sqlite3 *,const char * SQL,sqlite3_callback,void *,char * errmsg);这是一个函数执行一个句子一个句子。
参数描述:
第一个参数不再是,它是由前一个打开函数获得的指针,它是关键的数据结构。
第二个参数,const char * SQL,是一个SQL语句,以0结尾。
第三个参数是一个回调sqlite3_callback,当这个语句被执行,程序将调用函数你提供。
第四个参数,空*,是您提供的指针。可以向它传递任何指针参数。这个参数最终会传递给回调函数。如果不需要将指针传递给回调函数,可以填写null。
第五个参数,字符** errmsg,是一个错误的信息。注意的是指针的指针,有很多在sqlite3的固定的错误消息。sqlite3_exec执行后,你可以参考这个指针,当你失败时执行(直接printf(%s通过修改指针你通过指针的sqlite3_exec功能点的指针,你提供的错误提示信息,使sqlite3_exec功能可以通过这个char *外得到具体的错误。
描述:通常,sqlite3_callback和它背后的void *都是两个位置,可以填充空。填零就意味着你不需要一个回调。例如,如果你插入操作和删除操作,不需要使用一个回调。当你选择,你必须使用回调因为sqlite3检查数据告诉你什么样的数据是通过一个回调检测。
(2)执行回调:typedef int(* sqlite3_callback)(void *,int,char *,char *);你的回调函数必须定义为上述函数的类型。

SQLite数据库操作实例:
复制代码代码如下所示:
/ / sqlite3的回调函数
/ / SQLite的每一个记录,将调用回调
/ /准是void *参数,你在sqlite3_exec通过
通过参数,您可以传递一些特殊的指针(例如类指针、指针、结构),然后将其转换为相应的类型。
(类型为空*,必须强制输入您的类型),然后操作数据。
/ / n_column是该记录的字段数(即多少列此记录)
/ / char * column_value是关键值,与被检查的数据保存在这里,实际上是一个1维数组(不认为这是一个2维数组)。
每一个元素都是char *值,是一个字段内容(0结尾的字符串)
/ / char * column_name对应column_value,代表该字段的字段名称
Int LoadMyInfo(void * n_column对位,int,char * column_value,char * column_name)
{
在这里,我不使用参数,忽略它的存在。
int i;
printf(记录包含%d场
为(i = 0;i < n_column;i++)
{
printf(字段名称:%s >字段值:%s
}
printf(;
返回0;
}

int main(int,char *)
{
sqlite3 *分贝;
返回结果;
char * errmsg = null;
结果:sqlite3_open(.. 试验题库。DB
如果(结果)!= sqlite_ok)
{
返回1;数据库未打开
}
操作码数据库
/ /创建的表,命名为mytable_1,有2个字段:ID和名称,其ID是自动增长型,
在插入/未指定字段之后,它将从0开始增加。
结果:sqlite3_exec(DB,创建表mytable_1(ID整型主键递增,名称(姓名)));
如果(结果)!= sqlite_ok)
{
printf(创建表失败,错误代码:%d,错误原因:%s
}
插入一些记录
结果:sqlite3_exec(DB,插入mytable_1(名字)值('walking )
如果(结果)!= sqlite_ok)
{
printf(插入记录失败,错误代码:%d,错误原因:%s因此,errmsg);
}

结果:sqlite3_exec(DB,插入mytable_1(名字)值('riding自行车)
如果(结果)!= sqlite_ok)
{
printf(插入记录失败,错误代码:%d,错误原因:%s
}

结果:sqlite3_exec(DB,插入mytable_1(名字)值(‘车)
如果(结果)!= sqlite_ok)
{
printf(插入记录失败,错误代码:%d,错误原因:%s
}
结果:sqlite3_exec(DB,SELECT * FROM mytable_1,loadmyinfo,null,errmsg ); / /查询数据库(DB)sqlite3_close; / /关闭数据库
返回0;
}

通过上面的示例,您应该知道如何打开数据库以及如何进行数据库的基本操作。
(3)不要使用回调查询数据库。
sqlite3_exec使用回调函数的执行选择操作。也可以直接查询没有回调方法。但是,我仍然感觉很好,因为代码更整洁,只是回调,回调是很麻烦的,你必须声明一个函数,如果该函数是一个类的成员函数,你必须声明为静态的(C++成员函数实际上隐藏了一个参数:这个,C++调用成员函数时,函数指针作为一种隐式的第一个参数。因此,这不符合参数的SQLite的回调函数,前面提到的,只有当成员函数声明的静态,这个参数没有更多的隐式)。虽然回调看起来整齐,有时还要非回调选择查询。这可以通过sqlite3_get_table函数。
国际sqlite3_get_table(sqlite3 *,const char * SQL,char * resultp,int * nrow,int * ncolumn);
参数描述:
第一个参数不再说了,看看前面的例子。
第二个参数是SQL语句,如sqlite3_exec SQL一样。这是一个非常常见的字符串结尾 0。
第三个参数是查询的结果,它仍然是一维数组(不要认为它是一个二维数组,而不是一个三维数组)。它的内存布局是:第一行是字段的名称,下一行是每个字段的值。
第四个参数是查询多少记录(即检测到多少行)。
第五个参数是字段数(有多少列)。
第六个参数是与前面相同的错误消息,这里没有什么要说的。
SQLite数据库操作实例:
复制代码代码如下所示:
int main(int,char *)
{
sqlite3 *分贝;
返回结果;
char * errmsg = null;
char * dbresult; / /字符型两***。
Int nRow,ncolumn;
int,j;
指数;
结果:sqlite3_open(.. 试验题库。DB
如果(结果)!= sqlite_ok)
{
返回1;数据库未打开
}
操作码数据库
在 / /前面假设已经创建了mytable_1表
/ /查询,输入dbresult是char *,在这里添加一个地址匹配,转换成char *
结果:sqlite3_get_table(DB,选择*从mytable_1
如果(sqlite_ok = =结果) / /查询成功
{
指数= ncolumn; / / dbresult在数据的第一行的前面说的是字段的名称,从开始的ncolumn指数是真实的数据
printf(寻找%d个记录
为(i = 0;i < nrow;i++)
{
printf(第%d记录
为(J = 0;J < ncolumn;j++)
{
printf(字段名称:%s szlig;>字段值:%s
这场 / / dbresult值是连续的,从零到ncolumn 1指数为字段名
从 / / ncolumn指数开始,后面的字段值,
用一个平面的形式将它作为二维表(传统的行列表示法)
++索引;
}
printf(;
}
}
/ /这里,无论数据库查询成功,char *查询结果发布,利用SQLite释放功能
sqlite3_free_table(dbresult);
sqlite3_close(DB); / /关闭数据库
返回0;
}

通过这个例子,sqlite3共同使用了上述方法,你完全可以应付绝大多数数据库的要求。

三.事务处理
SQLite是事务处理的支持。如果你知道你想删除大量数据的同步,不让他们有一个统一的交易。通常,一个sqlite3_exec是一个交易,如果你想删除1万数据,SQLite做1万次:启动一个新事务->删除数据-> -> ->启动一个新事务…的过程。这个操作是很慢的,因为时间是花在交易开始,交易的申请。你可以把这些类似的业务交易,所以,如果操作是错误的,你也可以回滚事务的事务。手术没有特殊接口功能;它是一个普通的SQL语句。
以下内容如下:
复制代码代码如下所示:
返回结果;
结果:sqlite3_exec(DB,开始交易
结果:sqlite3_exec(DB,提交事务
结果:sqlite3_exec(DB,回滚事务