SQLite是遵守ACID的关系数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp创建的公有领域项目。
不像常见的客户端/服务器结构范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的。
应用Demo:
从官网下载SQLite amalgamation版源码,并将其中的sqlite3.h和sqlite3.c引入新建的C++ Win32 Console Application。
bool test(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, "
"size int not null, "
"data blob not null)",
512, &stmt, NULL) != SQLITE_OK)
return false;
if(sqlite3_step(stmt) != SQLITE_DONE)
return false;
if(sqlite3_finalize(stmt) != SQLITE_OK)
return false;
if(sqlite3_prepare_v2(db,
"insert into files values(last_insert_rowid() + 1, ?, 0, ?)",
512, &stmt, NULL) != SQLITE_OK)
return false;
if(sqlite3_reset(stmt) != SQLITE_OK)
return false;
if(sqlite3_bind_text(stmt, 1, "http://dearymz.blog.163.com", -1, NULL) != SQLITE_OK)
return false;
if(sqlite3_bind_text(stmt, 2, "http://dearymz.blog.163.com", -1, NULL) != SQLITE_OK)
return false;
if(sqlite3_step(stmt) != SQLITE_DONE)
return false;
if(sqlite3_finalize(stmt) != SQLITE_OK)
return false;
if(sqlite3_prepare_v2(db,
"select count(*) from files",
512, &stmt, NULL) != SQLITE_OK)
return false;
if(sqlite3_step(stmt) != SQLITE_ROW)
return false;
cout << sqlite3_column_int(stmt, 0) << endl;
if(sqlite3_finalize(stmt) != SQLITE_OK)
return false;
return true;
}
int _tmain(int argc, _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");
return 0;
}
[注:本文对应的SQLite版本为3.7.6.3]
评论