【SQLite】C++链接SQLite数据库

简介: 【SQLite】C++链接SQLite数据库

Crow的安装与构建

前言

项目地址:

https://github.com/crowcpp/crow

官方网站及文档说明:

https://crowcpp.org/master/

缘由:

前几天一直在寻找一款C++的Web框架,通过不断的在Github、StackOverFlow以及搜索引擎上搜索,最终我还是选择了Crow这一框架,其他相关框架还有,restbed,served,nrgest,微软的C++ REST SDK等,Github相关搜索C++ REST framework...

结果在测试用例构建时候,似乎遇到了一个bug,于是我提交了一个Issues,得到了开发人员的回复,最终问题得到了解决,在此,再次感谢项目维护人员的付出!


配置环境

本篇文章为Linux安装。其他平台或具体最低要求等,还请见官方说明文档

  • Ubuntu 20.0.4
  • GCC 9.4.0
  • Boost 1.71
  • ASIO 1.22.1
  • Cmake 3.24.0

到目前为止,Corw依赖使用的ASIO已经为脱离BOOST的独立版。

相关安装参考文章:

相关问题解决参考文章:

Unable to locate package —— Linux新手入门:Unable to locate package错误解决办法

安装Crow

从源码安装,详见官方说明文档

git clone https://github.com/CrowCpp/Crow.git

进入Crow目录,创建build目录,并进入。

mkdir build
cd build
cmake .. -DCROW_BUILD_EXAMPLES=OFF -DCROW_BUILD_TESTS=OFF
make install

Hello world

#include <crow.h>

int main(){
    crow::SimpleApp app;
    //测试
     CROW_ROUTE(app, "/test")([](){
        return "Hello world";
    });
    app.port(18888).multithreaded().run();
}

编译

  • g++
g++ main.cpp -o  main -lpthread
  • CMake
# 指定版本
cmake_minimum_required(VERSION 3.24)
# 项目名
project(main)
# 使用指定源文件来生成目标可执行文件
add_executable(main  main.cpp)
# 引入外部依赖包
find_package(Crow REQUIRED)
# 目标文件与库文件进行链接
target_link_libraries(main PUBLIC Crow::Crow)

测试

image-20220709084125646


我的第一个程序

  CROW_ROUTE(app, "/low_price_recommend").methods("POST"_method)([](const crow::request& req){
        auto x = crow::json::load(req.body);
        crow::json::wvalue return_ret({});//返回结果
        if (!x){//参数不全
            return_ret["status_code"] = std::string("0");
            return crow::response(return_ret);
        }else{
            return_ret = myfounction.low_price_recommend(
                        x["flight_date"].s(),
                        x["flight_departure"].s(),
                        x["flight_arrival"].s(),
                        x["flight_agent"].s(),
                        x["flight_retCounts"].s());
            return crow::response(return_ret);
        }
    });
  • myfounction为我封装的一个类创建的对象,low_price_recommend为其中的一个方法。返回一个crow::json::wvalue。
  • 变量x为具体传进来的参数
  • crow::json::wvalue为返回的json格式数据
    通过x[""].s()将对应的参数转成string

可能出现的问题

  • CMake 找不到asio库,例如如下所示:
CMake Error at /usr/local/share/cmake-3.24/Modules/CMakeFindDependencyMacro.cmake:47 (find_package):
By not providing "Findasio.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "asio", but
CMake did not find one.

Could not find a package configuration file provided by "asio" with any of
the following names:

asioConfig.cmake
asio-config.cmake

Add the installation prefix of "asio" to CMAKE_PREFIX_PATH or set
"asio_DIR" to a directory containing one of the above files. If "asio"
provides a separate development package or SDK, be sure it has been
installed.
Call Stack (most recent call first):
/usr/local/lib/cmake/Crow/CrowConfig.cmake:32 (find_dependency)
CMakeLists.txt:6 (find_package)

-- Configuring incomplete, errors occurred!
See also "/root/flight_query_system/query_system/build/CMakeFiles/CMakeOutput.log".
  • 解决
  • 打开并编辑这个文件/usr/local/lib/cmake/Crow/CrowConfig.cmake

大概在30行左右,将这行

list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
替换为
list(APPEND CMAKE_MODULE_PATH ${CROW_CMAKE_DIR})
再次感谢Crow项目维护成员Luca Schlecker老哥的解答,以及所有维护此项目的成员。

官方GITTER讨论聊天室——crowfork/community


解决跨域问题

#include <crow.h>
#include "query/query.h"
#include "common/common.h"
#include "crow/middlewares/cors.h"

int main(){

    crow::App<crow::CORSHandler> app;
    auto& cors = app.get_middleware<crow::CORSHandler>();
    cors
        .global()
        .origin("*")
        .headers("origin, x-requested-with, accept, access-control-allow-origin, authorization, content-type")
        .methods("POST"_method, "GET"_method, "PUT"_method, "DELETE"_method, "PATCH"_method, "OPTIONS"_method);


    //测试
     CROW_ROUTE(app, "/hello")([](){
        return "Hello world";
    });
     app.port(18888).multithreaded().run();
}
相关文章
|
3月前
|
SQL 安全 关系型数据库
sql数据库本地链接
在SQL数据库中,本地连接通常指的是在同一台计算机上运行的数据库客户端连接到该计算机上的数据库服务器。这种连接通常使用`localhost`或`127.0.0.1`(这是IPv4地址,代表本地回环地址
|
18天前
|
C++
C/C++静态链接pthread库的坑【-static -pthread】
C/C++静态链接pthread库的坑【-static -pthread】
|
1月前
|
监控 数据可视化 前端开发
基于python django生产数据与计划大屏,可链接数据库
本文介绍了一个基于Python Django框架开发的生产数据与计划大屏系统,该系统能够实时采集和展示生产数据,支持数据可视化和实时更新,以提高生产监控的效率和质量。
|
2月前
|
缓存 分布式计算 DataWorks
DataWorks操作报错合集之连接数据库时出现了通信链接失败的报错,该如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
3月前
|
Linux vr&ar C语言
Linux怎样更新Centos下Gcc版本支持C17?Centos7快速安装gcc8.3.1 可支持C++17(附gcc相关链接整理)
Linux怎样更新Centos下Gcc版本支持C17?Centos7快速安装gcc8.3.1 可支持C++17(附gcc相关链接整理)
197 2
|
3月前
|
SQL 关系型数据库 MySQL
使用 C++ 结合 MySQL 数据库实现留言板
使用 C++ 结合 MySQL 数据库实现留言板
161 1
|
3月前
|
SQL 前端开发 JavaScript
jquery链接sql数据库
直接使用jQuery来链接SQL数据库是不安全且不可行的。jQuery是一个前端JavaScript库,主要用于操作HTML文档、处理事件、执行动画等。出于安全原因,前端代码(包括JavaScript
|
4月前
|
SQL JavaScript 前端开发
js链接sql数据库
在JavaScript中直接连接SQL数据库(如MySQL、PostgreSQL等)通常不是推荐的做法,特别是当JavaScript在客户端(如浏览器)中运行时。这是因为将数据库凭据暴露给客户端会导致
48 0
|
1天前
|
编译器 C++
C++ 类构造函数初始化列表
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。
40 30
|
15天前
|
存储 编译器 C++
C ++初阶:类和对象(中)
C ++初阶:类和对象(中)