SQLite简单使用(C++)

前端之家收集整理的这篇文章主要介绍了SQLite简单使用(C++)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

sqlite简单使用(C++)

2011-06-18 11:43:03|分类C/C++|字号订阅

sqlite是遵守ACID关系数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp创建的公有领域项目。

不像常见的客户端/服务器结构范例,sqlite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的。

应用Demo:

官网下载sqlite amalgamation版源码,并将其中的sqlite3.h和sqlite3.c引入新建的C++ Win32 Console Application。

此时编译会产生 C1853报错,原因是sqlite3. c混用了stdafx. cpp产生的 预编译头文件

打开sqlite3.c的属性页面,并设置“不使用预编译头”,如此可以顺利编译通过。

添加如下的测试代码

booltest(sqlite3* db)

{

sqlite3_stmt* stmt = NULL;

if(sqlite3_prepare_v2(db,

"create table if not exists files("

"id int primary key not null,"

"name string unique not null,21)">"size int not null,21)">"data blob not null)",

512,&stmt,NULL) != sqlITE_OK)

returnfalse;

if(sqlite3_step(stmt) != sqlITE_DONE)

returnfalse;

if(sqlite3_finalize(stmt) != sqlITE_OK)

returnfalse;

if(sqlite3_prepare_v2(db,21)">"insert into files values(last_insert_rowid() + 1,?,?)",NULL) != sqlITE_OK)

returnfalse;

if(sqlite3_reset(stmt) != sqlITE_OK)

returnfalse;

if(sqlite3_bind_text(stmt,1,"http://dearymz.blog.163.com",-1,NULL) != sqlITE_OK)

returnfalse;

if(sqlite3_bind_text(stmt,2,NULL) != sqlITE_OK)

returnfalse;

if(sqlite3_step(stmt) != sqlITE_DONE)

returnfalse;

if(sqlite3_finalize(stmt) != sqlITE_OK)

returnfalse;

if(sqlite3_prepare_v2(db,21)">"select count(*) from files",NULL) != sqlITE_OK)

returnfalse;

if(sqlite3_step(stmt) != sqlITE_ROW)

returnfalse;

cout << sqlite3_column_int(stmt,0) << endl;

if(sqlite3_finalize(stmt) != sqlITE_OK)

returnfalse;

returntrue;

}

int_tmain(intargc,_TCHAR* argv[])

{

sqlite3* db = NULL;

if(sqlite3_open("test.db3",&db) ==0)

{

if(test(db))

cout <<"OK"<< endl;

else

cout <<"Error!"<< endl;

}

cout << sqlite3_errmsg(db) << endl;

sqlite3_close(db);

system("pause");

return0;

}

成功执行后会在项目目录内生成一个test.db3文件,通过 SQLiteSpy工具打开后可看到刚才插入的数据:

sqlite API简介:
其中 sqlite3_open自然是打开一个sqlite数据库(当该数据库不存在时会自动创建一个空库),相应的 sqlite3_close关闭数据库
sqlite3_stmt可以认为是对象级别的sql语句。对于频繁使用的sql,可通过 sqlite3_prepare_v2方法将其加工成stmt可以获得性能提升。stmt用完后需要调用相应的 sqlite3_finalize方法来释放底层数据库资源。
sqlite支持参数sql语句,支持?、?123、:name、@name、$name等多种参数写法。支持一系列的 sqlite3_bind_TYPE方法来进行参数绑定。
可以通过 sqlite3_step方法来执行一个准备好的stmt语句。成功执行时:对于无返回值的语句返回sqlITE_DONE;对于有返回值的语句返回sqlITE_ROW,可通过迭代sqlite3_step方法来访问结果的每一行。 sqlite3_column_TYPE方法可以取得结果行某列的具体值。

[注:本文对应的sqlite版本为3.7.6.3]

参考:
sqlite官网: http://sqlite.org/
推荐阅读:

2011-6-23
sqlite官方源码不支持加密解密,数据库文件中的数据以全明文的形式存在。不过作者显然仔细考虑过这个问题,留下了实现加密的接口。
我认为作者不引入加密解密功能是明智的,否则随随便便sqlite就变成sqlarge了。把关键的事情做好,就必须舍弃掉某些“需求”。赞同作者的设计抉择,犀利睿智!
sqlite Database Encryption/Decryption: http://sqlite-crypt.com/
原文链接:https://www.f2er.com/sqlite/202052.html

猜你在找的Sqlite相关文章