当前位置: 首页 > news >正文

网站开发如何dw中小手个人网站设计

网站开发如何dw中小手,个人网站设计,迪庆公司网站开发方法,辽阳做网站公司基本介绍 sqlpp11 是 C 的类型安全的 SQL 模版库。 Sqlpp11的官方下载地址是, GitHub - rbock/sqlpp11: A type safe SQL template library for C 在这里,可以找到官方的详细介绍文档, https://github.com/rbock/sqlpp11/tree/main/docs…

基本介绍

sqlpp11 是 C++ 的类型安全的 SQL 模版库。

Sqlpp11的官方下载地址是,

GitHub - rbock/sqlpp11: A type safe SQL template library for C++

在这里,可以找到官方的详细介绍文档,

https://github.com/rbock/sqlpp11/tree/main/docs

作者在介绍页面上是这样描述sqlpp11的,

A type safe embedded domain specific language for SQL queries and results in C++.

在C++领域,用于 SQL 查询及结果检查的类型安的全嵌入式域特定语言。

这句话到底是什么意思呢?

我们知道,SQL 和 C++ 都是强类型语言。 尽管如此,大多数 C/C++ 的 SQL 接口都是基于将查询语句构造为字符串并将数组或字符串映射解释为结果;也就是说,用户其实是使用字符串对数据库进行操作。

然而,人们更期望在进行SQL操作时能更自然地,或者说更符合人们习惯地使用类型检查,并对数据库进行操作。

sqlpp11 是一个嵌入式领域特定语言 (EDSL) 的模板库,它允许用户,

  1. 定义表示表和列的类型,
  2. 构造类型安全查询,在编译时检查语法错误、类型错误、名称错误甚至一些语义错误,
  3. 通过使用适当命名和类型化的成员,迭代特定的查询的结构,以解释最终结果。

这带来了几个好处,例如

  1. 库用户可以轻松地操作结构和函数,
  2. 编译器早在代码进入单元测试或生产之前就报告了多种错误,
  3. 该库隐藏了用于查询和解释 select 调用返回结果的字符串构造的细节。

该库支持静态和动态查询。 前者在类型和一致性检查方面提供了更大的好处。 后者使得构建运行中的查询更加容易。

sqlpp11 的核心是供应商中立的。 数据库的特定特征(例如不支持或非标准功能)由连接器库处理。 连接器库可以在编译时通知开发人员缺少的功能。 他们还会在需要时专门解释表达式。 例如,连接器可以使用运算符|| 或者用于字符串连接的 concat 方法,而无需开发人员更改语句。

此存储库中包含 MariaDB、MySQL、PostgreSQL、sqlite3、sqlcipher 的连接器。

作者同时也说明,该库已经在生产中使用,但不算完全完成。

下面,我们简单地用一个MySQL的例子介绍一下,如何使用这个模板库。网上有人举了个sqlite3的例子,

C++ ORM框架:SQLPP11教程-CSDN博客

对应地,我们在这里改成MySQL的例子。

下载sqlpp11项目

首先是到官方的github网址上把项目拉下来,使用他的最新版v0.64,本地库命名为sqlpp11v064,如下,

git clone --recursive GitHub - rbock/sqlpp11: A type safe SQL template library for C++  -b v0.64  sqlpp11v064

因为sqlpp11依赖date库,本来希望recursive把库拉到适当的地方,最后使用cmake后,发现data下载到了项目的_deps中,

Cmake配置(Configure)后生成(Generate)项目,最后就可以用vs2019打开项目进行编译了。就我这里的配置而方,date的位置是在,

D:\vQt2024SQL\devSqlpp11v064\_deps\date-src\include

当然你也可以单独到这里下载,

GitHub - HowardHinnant/date: A date and time library based on the C++11/14/17 <chrono> header

要说明的是,sqlpp11本身是不需要编译的,她只有一些头文件,编译出来的其实都是一些测试可执行文件。

例如,测试mysql的sample所需要的sql文件在这里,

D:\vQt2024SQL\sqlpp11v064\tests\mysql\usage\TabSample.sql

生成的结果在这里,

D:\vQt2024SQL\sqlpp11v064\tests\mysql\usage\TabSample.h

如果你运行sqlpp11_mysql_tests这个项目,实际就是对该数据库进行测试操作,如下,

这里我们不对sqlpp11的官方测试代码进行过多的解读,只是简单以MySQL为例介绍一下使用方法。

创建测试项目

我们用vs2019新建一个sqlpp11Test01的项目。

首先,项目的路径依赖必须正确,依上所述,这里的路径依赖是,

D:\vQt2024SQL\sqlpp11v064\include;

D:\vQt2024SQL\devSqlpp11v064\_deps\date-src\include;

C:\Program Files\MySQL\MySQL Server 8.0\include;

库依赖只有libmysql,如下,

C:\Program Files\MySQL\MySQL Server 8.0\lib\libmysql.lib;

生成SQL表的C++源码

假设我们需要进行操作的表格有以下SQL结构,

CREATE TABLE Student (
name  TEXT,
age   INTEGER
);

源码生成工具ddl2cpp在sqlpp11的scripts下面,

D:\vQt2024SQL\sqlpp11v064\scripts\ddl2cpp,

这里我们直接使用该工具生成Student.h文件,使用的指令为

python ddl2cpp Student.sql ./Student TestProject 

 

然后就可以看到头文件Student.h生成了,如下,

#pragma once// generated by ddl2cpp Student.sql ./Student TestProject#include <sqlpp11/table.h>
#include <sqlpp11/data_types.h>
#include <sqlpp11/char_sequence.h>namespace TestProject
{namespace Student_{struct Name{struct _alias_t{static constexpr const char _literal[] =  "name";using _name_t = sqlpp::make_char_sequence<sizeof(_literal), _literal>;template<typename T>struct _member_t{T name;T& operator()() { return name; }const T& operator()() const { return name; }};};using _traits = sqlpp::make_traits<sqlpp::text, sqlpp::tag::can_be_null>;};struct Age{struct _alias_t{static constexpr const char _literal[] =  "age";using _name_t = sqlpp::make_char_sequence<sizeof(_literal), _literal>;template<typename T>struct _member_t{T age;T& operator()() { return age; }const T& operator()() const { return age; }};};using _traits = sqlpp::make_traits<sqlpp::integer, sqlpp::tag::can_be_null>;};} // namespace Student_struct Student: sqlpp::table_t<Student,Student_::Name,Student_::Age>{struct _alias_t{static constexpr const char _literal[] =  "Student";using _name_t = sqlpp::make_char_sequence<sizeof(_literal), _literal>;template<typename T>struct _member_t{T Student;T& operator()() { return Student; }const T& operator()() const { return Student; }};};};
} // namespace TestProject

测试简单的增删改查操作

源码如下,

#include "sqlpp11/sqlpp11.h"
#include "sqlpp11/mysql/mysql.h"
#include "Student.h"
#include <sstream>
#include <stdlib.h>struct DEFECTINFO {int id;int type;std::string spath;std::string spos;
};int main(void)
{sqlpp::mysql::connection_config myconfig;myconfig.host = "localhost";myconfig.user = "root";myconfig.password = "";myconfig.database = "sqlpp_mysql";myconfig.debug = true;try{sqlpp::mysql::connection db(myconfig);TestProject::Student stu{};db.execute(R"(CREATE TABLE Student (name TEXT,age INTEGER))");// 单独插入一行db(insert_into(stu).set(stu.age = 12, stu.name = "one"));// 插入多行auto multi_insert = insert_into(stu).columns(stu.age, stu.name);for (int i = 0; i < 10; i++){std::ostringstream ostr;ostr << "linyiong" << i;multi_insert.values.add(stu.age = i, stu.name = ostr.str());}db(multi_insert);// 删除db(remove_from(stu).where(stu.age == 12));// 查询for (const auto& row : db(select(stu.name, stu.age).from(stu).where(stu.age > 1))){std::cout << row.name << ":" << row.age << std::endl;}// 更新db(update(stu).set(stu.name = "linyilong3").where(stu.age > 3));for (const auto& row : db(select(stu.name, stu.age).from(stu).where(stu.age > 1))){std::cout << row.name << ":" << row.age << std::endl;}}catch (std::exception& except){std::cout << except.what() << std::endl;}system("pause");
}

测试结果的输出如下,

使用MySQL workbend打开数据库,看到的结果如下,

本文结束

http://www.wangmingla.cn/news/164362.html

相关文章:

  • 怎么做淘宝联盟网站推广百度普通下载
  • 网站建的创新点上海搜索引擎优化公司
  • 廊坊网站设计制作百度灰色词优化排名
  • 西安做网站云速网络怎么分析一个网站seo
  • 青海网站建设汕头疫情最新消息
  • 哈尔滨企业建站系统福州seo扣费
  • 怎么通过做网站挣钱网站推广的基本方法有哪些
  • 免费推广网站搭建惠州百度seo地址
  • 免费软件下载网站入口指数函数求导
  • 怎么做网站的外链seo网站推广优化论文
  • 做网站用哪种语言好优化设计
  • ubuntu做网站开发吗seo是什么及作用
  • 直播app下载汅api免费下载seo哪家好
  • 小男孩与大人做的网站百度搜索风云榜小说总榜
  • 做站群什么样的算是违法网站小程序制作费用一览表
  • 网站系统操作手册专业的seo排名优化
  • 信息发布型网站建设的特点近期网络舆情事件热点分析
  • 做外贸英文网站哪家好搜索seo是什么意思
  • 公司门户网站建设方案国外搜索引擎大全
  • php网站开发自学wordpress
  • vps 做网站关键词站长工具
  • 34线城市做网站推广成都seo优化外包公司
  • 沈阳建设工程信息网中项网网站怎么优化关键词快速提升排名
  • 西宁做网站好的公司市场策划方案
  • 网站开发软件系统app搜索优化
  • 南京哪家做网站比较好seo搜索如何优化
  • 临汾做网站电话快速建站平台
  • dw建网站百度搜索引擎优化的方法
  • 织梦怎么做淘客网站站长工具seo查询5g5g
  • 建网站的宽带多少钱如何提交百度收录