首页 > 代码库 > 轻量级开源嵌入式关系数据库sqlite基本使用

轻量级开源嵌入式关系数据库sqlite基本使用

<一,>1,安装 for centos/ReaHat;

yum -y install sqlite sqlite-devel;

2,sqlite C/C++API接口,核心对象

OCI接口(Oracle Call Interface)
2_1,核心对象:database_connection和prepared_statement;

database_connection对象是由sqlite3_open()接口函数创建并返回的,在应用程序使用任何其他SQLite接口函数前,必须先调用该函数以便获得database_connection对象,后面的其他APIs调用中,都需要database_connection对象作为输入参数以完成相应的工作,prepared_statement,可将其视为编译好的SQL语句,所有SQL语句执行相关的函数都需要改对象作为输入参数以完成指定的SQL操作.

2_2,核心接口01)

sqlite3_open 操作SQLite数据库的入口函数,该函数返回的database_connection对象是很多其他SQLite APIs的句柄参数,我们可以通过该函数即可以打开已经存在 的数据库文件,也可以创建新的数据库文件,该函数返回的database_connection对象,我们可以在多个线程之间共享该对象的指针,以便完成和数据库相关的任意操作,为访问多个数据库而创建多个数据库连接对象,因为通过SQLite自带的ATTACH命令可以在一个连接中方便的访问多个数据库;

2),sqlite3_prepar

该函数将SQL文本转换为prepared_statement对象,斌在函数执行后返回该对象指针,该函数不会评估参数指定SQL语句,它仅仅是将SQL文本初始化为待执行的状态,sqlite3_prepare_v2等同;

3),sqlite_step

函数用于评估sqlite3_prepare函数返回的prepared_statement对象,在执行完该函数之后,prepared_statement对象的内部指针将指向其返回的结果集的第一行;迭代其后的数据行,则需要不断的调用该函数,直到遍历完数据行,对于insert,update和delete等DML语句,sqlite_step一次即可完成;

4),sqlite3_column _....

函数用于获取当前行指定列的数据,

sqlite3_column_blob,bytes,bytes16,double,int,int64,text,text16,type,value,count;

其中sqlite3_column_count函数用于获取当前结果集中的字段数据

案例伪码,

使用sqlite3_step和sqlite_column函数迭代结果集中每行数据

int fieldCount = sqlite3_column_count();

while (sqlite3_step()<>EOF)

{

for (int i = 0;i < fieldCount;i++)

{

int v = sqlite3_column_int();

}

}

5),sqlite3_finalize

函数用于销毁prepared_statement对象,否则会造成内存泄露

6),sqlite3_close

函数用于关闭之前打开的database_connection对象,其中所有和该对象相关的prepared_statement对象都必须在此之前销毁;

3,参数变量绑定;

SQLite的SQL文本也支持变量绑定,以减少SQL语句被动态解析的次数,有利于提高数据查询和操作效率,要完成该操作,还需要SQLite提供的另外2个接口,sqlite3_reset和sqlite3_bind;

 1 void test_parameter_binding() { 2 //1. 不带参数绑定的情况下插入多条数据, 3 char strSQL[128]; 4 for (int i = 0;i < MAX_ROWS;++i) 5 { 6 sprintf(strSQL,"insert into testtable values(%d)",i); 7 sqlite3_prepare_v2(...,strSQL); 8 sqlite3_step(prepared_statement); 9 sqlite3_finalize(prepared_statement);10 }11 //2,参数绑定情况下插入多条数据12 string strSQLWithParameter = "insert into testtable values(?)";13 sqlite3_prepare_v2(...,strSQL);14 for (int i = 0;i < MAX_ROWS;++i)15 {16 sqlite3_bind();17 sqlite3_step();18 sqlite3_reset();19 }20 sqlite3_finalize();21 22 }

<二,>数据库,表CLI语句;

在指定数据库创建表;

用attach database ‘数据库文件路径,可以存在或是新建‘ as 数据库名,同前面的数据库文件名一样;

在在其创建表时,仍然需要指定此数据库的名称,不然SQL创建的数据表将会被创建到我们sqlite3 数据库名称的数据库中;

简单数据库备份恢复