澳门新浦京app下载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命令可以在三个老是中有益的拜候八个数据库。
    2State of Qatar. 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对象,不然将会招致内部存款和储蓄器败露。 6卡塔尔(قطر‎. 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_stmtState of Qatar; } //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(卡塔尔”中的问号(State of Qatar表示参数变量的占位符,该准则在广大关系型数据库中都是千人一面的,因而那对于数据库移植操作依旧比非常的低价的。

透过上面包车型大巴身教重于言教代码可以不言而喻的观望,参数绑定写法的实行效能要超过每趟改换不一致的SQL语句的写法,即2State of Qatar在功效上要显著优于1State of Qatar,上边是本着那二种写法的具体相比:

1State of Qatar.
单单从程序表面来看,前面四个在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地图