SQLite教程:C/C++接口简介

一、概述:

在SQLite提供的C/C++接口中,个中5个APIs归于基本接口。在这里篇博客中大家将第一介绍它们的用法,以至它们所涉嫌到的为主SQLite对象,如database_connection和prepared_statement。相比较于任何数据库引擎提供的APIs,如OCI、MySQL
API等,SQLite提供的接口照旧不行便于通晓和操纵的。
二、核心指标和接口:

  1. 着力指标:
    在SQLite中最要紧的七个对象是,database_connection和prepared_statement。database_connection对象是由sqlite3_open(卡塔尔(قطر‎接口函数创立并回到的,在应用程序使用此外别的SQLite接口函数在此以前,必得先调用该函数以便得到database_connnection对象,在随之的别样APIs调用中,都要求该对象作为输入参数以成功相应的职业。至于prepare_statement,大家能够省略的将它视为编写翻译后的SQL语句,由此,全数和SQL语句实施相关的函数也都亟需该目的作为输入参数以成就内定的SQL操作。
  2. 主导接口: 1卡塔尔. sqlite3_open
    上边已经涉及过这几个函数了,它是操作SQLite数据库的入口函数。该函数重回的database_connection对象是无数别样SQLite
    APIs的句柄参数。注意,大家由此该函数不只能够展开已经存在的数据库文件,也足以创立新的数据库文件。对于该函数重回的database_connection对象,大家得以在三个线程之间分享该对象的指针,以便产生和数据库相关的任意操作。但是在八线程情形下,大家更是推荐的运用格局是,为各种线程创造独立的database_connection对象。对于该函数还会有有个别也急需额外表达,大家并不须要为了访谈四个数据库而创制三个数据库连接对象,因为通过SQLite自带的ATTACH命令能够在二个接连中有益的走访多个数据库。
    2卡塔尔. sqlite3_prepare
    该函数将SQL文本调换为prepared_statement对象,并在函数实行后回到该指标的指针。事实上,该函数并不会评估参数钦定SQL语句,它然则是将SQL文本伊始化为待推行的动静。最终索要建议的,对于新的应用程序大家能够应用sqlite3_prepare_v2接口函数来代替该函数以完结同样的办事。
    3卡塔尔. sqlite3_step
    该函数用于评估sqlite3_prepare函数返回的prepared_statement对象,在执行完该函数之后,prepared_statement对象的里边指针将指向其回到的结果集的首先行。假使计划进一步迭代其后的多少行,就供给持续的调用该函数,直到全体的数量行都遍历完成。然则对于INSERT、UPDATE和DELETE等DML语句,该函数试行三回就可以成功。
    4卡塔尔. sqlite3_column
    该函数用于获取当前进钦定列的多少,但是严俊意义上讲,此函数在SQLite的接口函数中并不设有,而是由一组有关的接口函数来成功该意义,个中每一种函数都回到不相同品种的多寡,如:复制代码 代码如下: sqlite3_column_blob
    sqlite3_column_bytes sqlite3_column_bytes16 sqlite3_column_double
    sqlite3_column_int sqlite3_column_int64 sqlite3_column_text
    sqlite3_column_text16 sqlite3_column_type sqlite3_column_value
    sqlite3_column_count
    其中sqlite3_column_count函数用于获取当前结果集中的字段数据。下边是应用sqlite3_step和sqlite3_column函数迭代结果集中每行数据的伪代码,注意这里作为示范代码简化了对字段类型的判定:复制代码 代码如下: int 田野同志Count =
    sqlite3_column_count(…); while (sqlite3_step(…) EOF) { for (int i
    = 0; i fieldCount; ++i) { int v = sqlite3_column_int(…,i); } } 5).
    sqlite3_finalize 该函数用于销毁prepared
    statement对象,不然将会产生内部存款和储蓄器败露。 6State of Qatar. sqlite3_close
    该函数用于关闭在此之前张开的database_connection对象,在那之中具有和该对象相关的prepared_statements对象都不得不从前先被消逝。

三、参数绑定:

和超越八分之四关系型数据库同样,SQLite的SQL文本也支撑变量绑定,以便减弱SQL语句被动态分析的次数,进而加强数据查询和数据操作的频率。要水到渠成该操作,大家需求运用SQLite提供的其它多个接口APIs,sqlite3_reset和sqlite3_bind。见如下示例:

复制代码 代码如下:void
test_parameter_binding(卡塔尔国 { //1. 不带参数绑定的意况下插入多条数据。
char strSQL[128]; for (int i = 0; i MAX_ROWS; ++i) {
sprintf(strSQL,”insert into testtable values(%d)”,i);
sqlite3_prepare_v2(…, strSQL); sqlite3_step(prepared_stmt);
sqlite3_finalize(prepared_stmt卡塔尔国; } //2. 参数绑定的状态下插入多条数据。
string strSQLWithParameter = “insert into testtable values(卡塔尔”;
sqlite3_prepare_v2(…, strSQL); for (int i = 0; i MAX_ROWS; ++i) {
sqlite3_bind(…,i); sqlite3_step(prepared_stmt);
sqlite3_reset(prepared_stmt); } sqlite3_finalize(prepared_stmt); }

这里首先要求验证的是,SQL语句”insert into testtable
values(卡塔尔(قطر‎”中的问号(卡塔尔国表示参数变量的占位符,该法则在众多关系型数据库中都是如同一口的,由此那对于数据库移植操作依旧相比便利的。

通过下边包车型地铁上行下效代码可以鲜明的收看,参数绑定写法的试行功用要高于每一回改换区别的SQL语句的写法,即2State of Qatar在效用上要明显优化1State of Qatar,下边是照准那二种写法的切切实实相比较:

1卡塔尔国.
单单从程序表面来看,前边一个在for循环中实行了越来越多的职分,比如字符串的填充、SQL语句的prepare,以致prepared_statement对象的获释。
2卡塔尔(قطر‎.
在SQLite的法定文书档案中显著的提出,sqlite3_prepare_v2的实施效用往往要自轻自贱sqlite3_step的功用。
3卡塔尔(قطر‎. 当插入的数据量十分的大时,前面一个带给的效用升高依旧非凡可观的。

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图