轻量级开源嵌入式关系数据库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 数据库名称的数据库中;
简单数据库备份恢复
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。