什么是SQLitePP ?
SQLitePP 是一个C++封装的 SQLite组件,开源、免费。目的是使用面向对象的方式来简化SQLite的使用,具有面向对象的访问方式。开源工程:http://sourceforge.net/projects/sqlite4pp/ 欢迎各位开发人加入!
如何使用?
1. 从这里下载最新的版本,http://sourceforge.net/projects/sqlite4pp/files,目前仅有基于MSVC2010的版本,欢迎各位开发者加入,开发其他平台和版本。
2. 将 include 中的头文件 sqlitepp.h 加入到你的工程, lib中的 sqlitepp.lib 连接进去就好。
#include "sqlitepp.h"
3. 将 lib 下的 sqlitepp.dll 放入到运行目录即可。
如何创建连接?
如下代码所示,定义一个 连接DBConnection 对象, 然后调用 connect 方法,指定数据库地址即可。
//define a connection SQLitePP::DBConnection conn; // connect to a database int rc = conn.connect("D:\\mytestdb.db"); if (rc != 0 || !conn.isConnected()) { std::cout << conn.getErrorMessage() << std::endl; } else { std::cout << "we connected to the sqlite now!" << std::endl; }
如何执行DML语句?
如下代码所示,创建数据库表 tbl_test。
// define a command and set a command text SQLitePP::DBCommand cmd(&conn); cmd.setCommandText("create table tbl_test(id integer not null, name text, contact text)"); rc = cmd.execute(); // execute if (rc != 0) { std::cout << conn.getErrorMessage() << std::endl; } else { std::cout << "The table [tbl_test] has been created!" << std::endl; }注:所有的 DBCommand 对象都需要绑定到 DBConnection 上。
如何执行SQL语句进行插入数据?
如下代码,插入数据到刚才建立的表中。
// insert data cmd.setCommandText("insert into tbl_test(id, name, contact) values(0, 'gavin', 'vxling@gmail.com')"); rc = cmd.execute(); // execute if (rc != 0) { std::cout << conn.getErrorMessage() << std::endl; return; }
如何查询结果?
如下代码片段所示,执行一个查询语句,查询到结果,然后将 列名打印出来, 然后将所有数据打印。
// execute a query cmd.setCommandText("select * from tbl_test"); rc = cmd.execute(); // execute if (rc != 0) { std::cout << conn.getErrorMessage() << std::endl; return; } // print field name for (int i =0; i < cmd.fieldCount(); ++i) { std::cout <<cmd.getFieldName(i) << "\t"; } std::cout << std::endl; // print all result while (cmd.fetchNext()) { std::cout << cmd.field(0) << "\t" << cmd.field(1) << std::endl; }好了,到此为止,可以创建一个简单的文件数据库,然后进行写入、读取操作。附上所有代码: #include "sqlitepp.h" #include <iostream> void simple_example(); int main(int argc, char **argv) { simple_example(); return 0; } // a simple example to use SQLitePP void simple_example() { //define a connection SQLitePP::DBConnection conn; // connect to a database int rc = conn.connect("D:\\mytestdb.db"); if (rc != 0 || !conn.isConnected()) { std::cout << conn.getErrorMessage() << std::endl; return; } else { std::cout << "we connected to the sqlite now!" << std::endl; } // define a command and set a command text SQLitePP::DBCommand cmd(&conn); cmd.setCommandText("create table tbl_test(id integer not null, name text, contact text)"); rc = cmd.execute(); // execute if (rc != 0) { std::cout << conn.getErrorMessage() << std::endl; return; } else { std::cout << "The table [tbl_test] has been created!" << std::endl; } // insert data cmd.setCommandText("insert into tbl_test(id, name, contact) values(0, 'gavin', 'vxling@gmail.com')"); rc = cmd.execute(); // execute if (rc != 0) { std::cout << conn.getErrorMessage() << std::endl; return; } // execute a query cmd.setCommandText("select * from tbl_test"); rc = cmd.execute(); // execute if (rc != 0) { std::cout << conn.getErrorMessage() << std::endl; return; } // print field name for (int i =0; i < cmd.fieldCount(); ++i) { std::cout <<cmd.getFieldName(i) << "\t"; } std::cout << std::endl; // print all result while (cmd.fetchNext()) { std::cout << cmd.field(0) << "\t" << cmd.field(1) << std::endl; } }
下次介绍如何进行更高级的操作, 如 内存数据库、指定优化参数等等。