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
2013/3/13 | Tags:sqlite,sqlite3,CppSQLite,C | C/C++代码 | 查看评论(0)