Sqlite是在工程项目中使用比较多的小型数据库。由于其非常小巧且占用资源低,深受开发者喜欢。这里就介绍一下如何通过Poco框架操作SQLite数据库。这里假设你已经完整编译了Poco库,如果还没有编译好,可以下载我已经编译好的Poco库。下载地址:

VS2017编译POCO静态库

首先在工程中引入依赖库PocoDataSQLite.lib,同时包含对应的头文件目录。完成对应的路径添加之后,我们就可以使用Poco库来读写SQLite数据库中的数据了。

在开始使用数据库和结束使用数据库的时候,我们需要注册和注销对应的数据库连接。这里我们采用RAII的模式在构造和析构的时候处理连接,对应的实现如下所示:

SqliteDatabase::SqliteDatabase()
{//注册连接Poco::Data::SQLite::Connector::registerConnector();
}
SqliteDatabase::~SqliteDatabase()
{//注销连接Poco::Data::SQLite::Connector::unregisterConnector();
}

完成连接的注册之后,我们就可以建立会话来操作数据库中的内容了,创建会话的方式如下所示:

//@1指定数据库的类型为SQLite
//@2指定数据库的名称为test.db
Session session(Poco::Data::SQLite::Connector::KEY, "test.db");
//拼接SQL语句
Statement stmt = (session << "SELECT * from TABLENAME");
//执行对应的SQL
stmt.stmt.execute();

完成上面的配置之后我们就可以通过SQL语句来对数据库中的内容进行处理了。下面以一个简单的数据体为例介绍一下如何通过Poco库实现对数据表的增删改查操作。数据体主要包含五个字段: 姓名,年龄,性别,身高,身份ID。对应的实现如下:

class Person {public:std::string mName;//姓名int mAge;         //年龄std::string mSex; //性别int mHeight;      //身高std::string mId;  //身份ID
};

然后通过SQLite数据库访问类,实现数据的增删改查操作,对应的实现如下:

//SqliteDatabase.h
#ifndef _SQLITE_DATA_BASE_H_
#define _SQLITE_DATA_BASE_H_#include "Poco\Data\SQLite\SQLite.h"
#include "Poco\Data\Session.h"
#include "Poco\Mutex.h"
#include "Poco\Process.h"//添加需要的的类
using namespace Poco;
using Poco::FastMutex;
using Poco::ProcessHandle;
using Poco::Data::Session;
using Poco::Data::Keywords::now;
using Poco::Data::Keywords::use;
using Poco::Data::Keywords::bind;
using Poco::Data::Keywords::into;
using Poco::Data::Statement;//数据结构体
class Person {public:std::string mName;//姓名int mAge;         //年龄std::string mSex; //性别int mHeight;      //身高std::string mId;  //身份ID
};class SqliteDatabase
{public:static SqliteDatabase* Instance();
private:SqliteDatabase();
public:~SqliteDatabase();//增加用户bool addNewPerson(Person& info);//删除用户bool deletePersonByID(const std::string& uuid);//修改用户信息bool updatePersonByID(const std::string& uuid, Person& info);//查找用户信息bool searchPersonByID(std::string uuid, Person& info);//判断某个用户信息是否存在bool isPersonInfoExist(const std::string& uuid);
private:static SqliteDatabase* mInstance;static FastMutex mutex;
};
#endif
//SqliteDatabase.cpp
#include "SqliteDatabase.h"
#include "Poco\Data\SQLite\Connector.h"SqliteDatabase* SqliteDatabase::mInstance = nullptr;
FastMutex SqliteDatabase::mutex;//单例模式,doublecheck,线程安全
SqliteDatabase * SqliteDatabase::Instance()
{if (mInstance == nullptr){mutex.lock();if (mInstance == nullptr){mInstance = new SqliteDatabase();}mutex.unlock();}return mInstance;
}SqliteDatabase::SqliteDatabase()
{Poco::Data::SQLite::Connector::registerConnector();
}SqliteDatabase::~SqliteDatabase()
{Poco::Data::SQLite::Connector::unregisterConnector();
}bool SqliteDatabase::addNewPerson(Person & info)
{Session session(Poco::Data::SQLite::Connector::KEY, "test.db");session << "CREATE TABLE IF NOT EXISTS PERSONINFO (UUID VARCHAR(64),  NAME VARCHAR(64), AGE INTEGER(3), SEX VARCHAR(64), HEIGHT INTEGER(3))", now;if (isPersonInfoExist(info.mId)){return false;}//采用绑定的形式防止SQL注入Statement stmt = (session << "INSERT INTO PERSONINFO VALUES(:uuid, :name, :age, :sex, :height)",bind(info.mId), bind(info.mName), bind(info.mAge), bind(info.mSex), bind(info.mHeight));return (stmt.execute() > 0);
}bool SqliteDatabase::deletePersonByID(const std::string & uuid)
{Session session(Poco::Data::SQLite::Connector::KEY, "test.db");Statement stmt = (session << "DELETE FROM PERSONINFO WHERE UUID = :uuid", bind(uuid.c_str()));return (stmt.execute() == 1);
}bool SqliteDatabase::updatePersonByID(const std::string & uuid, Person & info)
{Session session(Poco::Data::SQLite::Connector::KEY, "test.db");Statement stmt = (session << "UPDATE PERSONINFO SET NAME = :name, AGE = :age, SEX = :sex, HEIGHT = :height  WHERE UUID = :uuid",bind(info.mName), bind(info.mAge), bind(info.mSex), bind(info.mHeight), bind(uuid));return (stmt.execute() == 1);
}bool SqliteDatabase::searchPersonByID(std::string uuid, Person & info)
{Session session(Poco::Data::SQLite::Connector::KEY, "test.db");int age = 0;int height = 0;std::string name;std::string sex;Statement stmt = (session << "SELECT NAME, AGE, SEX, HEIGHT FROM PERSONINFO WHERE UUID = :uuid",into(name), into(age), into(sex), into(height), bind(uuid));if (stmt.execute() == 1){info.mAge = age;info.mName = name;info.mSex = sex;info.mHeight = height;info.mId = uuid;return true;}return false;
}bool SqliteDatabase::isPersonInfoExist(const std::string & uuid)
{Session session(Poco::Data::SQLite::Connector::KEY, "test.db");Statement stmt = (session << "SELECT * from PERSONINFO WHERE UUID = :uuid", bind(uuid));if (stmt.execute() == 1){return true;}return false;
}

数据库访问类,采用线程安全的单例模式,可以在多线程的场景下使用。

Poco库使用:操作SQLite数据库相关推荐

  1. C++ 使用Poco库操作SQLite数据库

    C++ 使用Poco库操作SQLite数据库 flyfish 文章目录 C++ 使用Poco库操作SQLite数据库 数据库插入记录 数据库插入记录方式2 数据库插入记录方式3 更方便的数据库插入记录 ...

  2. python读数据库的通信协议是,Python操作SQLite数据库过程解析

    SQLite是一款轻型的数据库,是遵守ACID的关系型数据库管理系统. 不像常见的客户-服务器范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分.所以主要的通信协 ...

  3. PC软件开发技术之三:C#操作SQLite数据库

    我们在开发应用是经常会需要用到一些数据的存储,存储的方式有多种,使用数据库是一种比较受大家欢迎的方式.但是对于一些小型的应用,如一些移动APP,通常的数据库过于庞大,而轻便的SQLite则能解决这一问 ...

  4. python数据库sqlite3_Python 操作 SQLite 数据库

    本文字数:3808 字 阅读本文大概需要:10 分钟 写在之前 SQLite 是一个小型的关系型数据库,它最大的特点在于不需要单独的服务.零配置.我们在之前讲过的两个数据库,不管是 MySQL 还是 ...

  5. C#操作SQLite数据库

    我们在开发应用是经常会需要用到一些数据的存储,存储的方式有多种,使用数据库是一种比较受大家欢迎的方式.但是对于一些小型的应用,如一些移动APP,通常的数据库过于庞大,而轻便的SQLite则能解决这一问 ...

  6. python数据库操作sqlite_Python3操作SQLite数据库

    Python3操作SQLite数据库 SQLite SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目 ...

  7. python数据存储系列教程——python操作sqlite数据库:连接、增删查改、指令执行

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python操作sqlite数据库 sqlite数据库以.db格式的文件形式存在,所以不需要安装驱动和应用系统,在标准库中也集成了sqlite ...

  8. python对sqlite增删改查_Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】...

    本文实例讲述了python操作SQLite数据库的方法.分享给大家供大家参考,具体如下: SQLite简介 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的 ...

  9. python操作sqlite数据库

    SQLite数据库是一款轻量级的数据库,无服务器.零配置.事务性的SQL数据库引擎.SQLite是世界上最广泛部署的SQL数据库引擎,而且SQLite的源代码不受版权限制,是小型项目和简单web应用的 ...

最新文章

  1. 当你累了,准备放弃时,看看这个吧!!!
  2. spring ioc原理分析
  3. 【Prometheus】 Prometheus 入门到实战搭建监控系统
  4. 如何搭建html运行环境,搭建基于express框架运行环境的方法步骤
  5. 【正则表达式】1.入门
  6. python nlp包_StanfordNLP,让你在 Python 里一手掌握 53 种自然语言分析
  7. IDEA中添加tomcat服务器和创建一个新的web项目
  8. SQL Server 2005与2000写法上的差别
  9. Oracle 字符串函数
  10. face recognition[MobiFace]
  11. 基于Ameoba实现mysql读写分离
  12. JoyOI(TYVJ)1061-Mobile Service【线性dp】
  13. 抖音与六大影视公司达成合作 一年内将至少与40部影片绑定营销
  14. 我为何选择Facebook广告
  15. java mysql jdbc封装类_Java-jdbc-封装类形式的数据库操作
  16. adblock android插件,adblock plus
  17. Edge浏览器出现兼容性问题且所有页面崩溃,包括设置均无法打开并访问的解决方法
  18. linux安装红警教程,Deepin v20下玩红警三
  19. 详解网站源码是什么到底该怎么使用?
  20. 系统介绍python魔法方法

热门文章

  1. 个人网站盈利的几种方式
  2. 二进制文件和 ASCII
  3. idea打开接口实现类快捷键
  4. shell cheat sheet (备忘录)
  5. vb之msgbox用法(转)
  6. 为什么推荐使用CameraX?
  7. 3896. 【NOIP2014模拟10.26】战争游戏 (Standard IO)
  8. S3C6410芯片揭密之一 S3C6410体系结构
  9. USB摄像头驱动之设置属性
  10. 无人机PHP3,【无人机摄影-基础篇】大疆精灵3使用最全指南(官方出品)