sqlite不多说了,很好用的一个数据库,虽然自身API用起来也很简单,但是参数很多,对于大工程来说做封装类是很有必要的,官方推荐了一个C++版本的封装类,就是这玩意。
本人测试使用非常方便,编码也有老外一贯的严谨,推荐了。析构函数帮我们做了很多擦屁股的事情,直接定义调用即可。
示例:
CppSQLite3DB db; try { // 打开或新建一个数据库 db.open(AnsiToUtf8("c:\\测试\\test.db")); // 判断表名是否已经存在 if(!db.tableExists(TEXT("Customers"))) { // 不存在,新建表Customers db.execDML(TEXT("CREATE TABLE Customers(cust_name varchar(50) NOT NULL PRIMARY KEY, cust_address varchar(50));")); } // 插入1条记录 db.execDML(TEXT("INSERT INTO Customers VALUES('Village Toys', '200 Maple Lane');")); // 插入1条记录 db.execDML(TEXT("INSERT INTO Customers VALUES('Kids Place', '333 South Lake Drive');")); // 删除1条记录 db.execDML(TEXT("DELETE FROM Customers WHERE cust_name = 'Village Toys';")); // 使用显示事务插入10条记录 TCHAR buf[256] = {0}; db.execDML(TEXT("BEGIN TRANSACTION;")); for (int i = 0; i < 10; ++i) { memset(buf, 0, sizeof(buf)); wsprintf(buf, TEXT("INSERT INTO Customers VALUES ('Fun%dALL', '%d Sunny Place');"), i, i); db.execDML(buf); } db.execDML(TEXT("COMMIT TRANSACTION;")); // 更新1条记录 db.execDML(TEXT("UPDATE Customers SET cust_address = '4545 53rd Street' WHERE cust_name = 'Fun0ALL';")); // 获取总记录条数 int nCount = db.execScalar(TEXT("SELECT COUNT(*) FROM Customers;")); TCHAR szCount[50] = {0}; memset(szCount, 0, sizeof(szCount)); wsprintf(szCount, TEXT("Record count: %d."), nCount); AfxMessageBox(szCount); // 获取每一条记录 CppSQLite3Query q = db.execQuery(TEXT("SELECT * FROM Customers;")); while (!q.eof()) { AfxMessageBox(q.fieldValue(0)); q.nextRow(); } // 销毁语句 q.finalize(); // 关闭数据库 db.close(); AfxMessageBox(TEXT("测试完成!")); } catch(CppSQLite3Exception ex) { AfxMessageBox(ex.errorMessage()); }
点击下载CppSQLite3:201303131921040313