基于C++11的数据库连接池环境配置

欢迎访问我的另一个博客: https://xingzhu.top/

ubuntu 安装 python2

  1. 由于接下来要使用 python,所以先安装 python
# 安装 python2.7.18 即可
# python3 不行,版本过高,会报错
sudo apt install python2
python2 --version
  1. 安装完成后我们可以使用如下命令来检查目前可用的 Python 版本:
ls /usr/bin/python*
  1. 在 Ubuntu 中切换默认 Python 版本
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 9
sudo update-alternatives --config python

# 可能出现,说明之前配置过默认方式
There are 2 choices for the alternative python (providing /usr/bin/python).
  Selection    Path              Priority   Status
------------------------------------------------------------
* 0            /usr/bin/python3   2         auto mode
  1            /usr/bin/python2   1         manual mode
  2            /usr/bin/python3   2         manual mode
Press  to keep the current choice[*], or type selection number: 
# 选择 python2 即可,也就是填写数字 1
  1. 查看默认版本
# 会看到 python 2.7.18
python --version

ubuntu 安装 mysql

  1. 安装 mysql
sudo apt update 
sudo apt install mysql-server
  1. 安装完成后,MySQL 服务将自动启动。要验证 MySQL 服务器正在运行,请输入
sudo systemctl status mysql
  1. 初始化数据库
mysql -u root
# 然后设置密码,下次就能 mysql -u root -p 输入密码登录了
  1. 安装 mysql 头文件和静态库文件
# 安装了这个之后,就能调用 MYSQL 的功能函数
# 主要是在写程序中使用,使用 <mysql.h> 头文件
sudo apt-get install libmysqlclient-dev
  • 由于安装后,mysql.h 默认安装在 /usr/include/mysql 这个目录中,因此每次调用 mysql.h ,编译都需要指定头文件路径
g++ *.cpp -o main -I/usr/include/mysql -lmysqlclient
  • 所以配置环境变量,将这个路径加到环境变量中
# 打开配置 .bashrc 文件,这是一个配置文件,每次启动机器都会加载这个配置
vim ~/.bashrc


# 在文件末尾加入这个
export CPLUS_INCLUDE_PATH=/usr/include/mysql:$CPLUS_INCLUDE_PATH


# 使配置立即生效,不执行这个,需要重启虚拟机才能加载到环境中
source ~/.bashrc
  • 配置后
g++ *.cpp -o main -lmysqlclient

测试代码 (只是测试 MYSQL API 能否使用,也就是上述环境是否配置成功)

// localhost 是数据库服务器 IP 地址,也就是你数据库所在的主机 IP地址
// username 是用户名,password 是密码
// database 是数据库名,也就是你电脑数据库服务器上的数据库名,如果才下载 mysql,可以填写 mysql 默认自带的
// 后面参数默认即可
#include <stdio.h>
#include <mysql.h>
int main()
{
    MYSQL *conn = mysql_init(NULL);

    if (mysql_real_connect(conn, "localhost", "username", "password", "database", 0, NULL, 0) == NULL)
    {
        fprintf(stderr, "连接失败: %s\n", mysql_error(conn));
        return 1;
    }
    printf("成功连接到数据库!\n");
    mysql_close(conn);
    return 0;
}

Linux 访问 Windows 数据库

建立防火墙规则

  1. 打开 Windows 的防火墙,找到高级设置

  2. 依次点击这两个

QQ_1727506633340

  1. 点击这个端口

QQ_1727506718203

  1. 填写端口号

QQ_1727506764170

QQ_1727506811885

QQ_1727506830419

名称任意指定

QQ_1727506875235

进行连接

  1. 首先设置 Windows MySQL 数据库权限,让其他机器能够访问
# 登录数据库
mysql -u root -p
-- 授予权限
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%';
-- username 是你想要创建的用户名
-- password 是你想指定其他机器登录这数据库的密码验证
-- 通过这个创建的用户名和密码,再授予权限,其他机器能够通过这个用户登录到数据库,使用它

-- 刷新这个数据库权限
FLUSH PRIVILEGES;
  1. Linux 登录
mysql -u root -h Windows的 IP地址 -p

# 查看 Windows的 IP 地址
ipconfig

QQ_1727507850839

Linux 下 json 库安装

由于我是想用 Linux 下的 jsoncpp,所以如此配置,若想使用 Windows 的 jsoncpp,在 VS 上运行,参考: https://xingzhu.top/archives/jsoncpp

  1. 官网下载 json-cpp

https://sourceforge.net/projects/jsoncpp/files/

或者我的百度网盘: 链接: https://pan.baidu.com/s/1qwzWf9hOHmTr0SCERTdoog 提取码:0278

  1. 下载 scons

http://sourceforge.net/projects/scons/files/scons/2.1.0/scons-2.1.0.tar.gz/download

或者我的百度网盘: 链接: https://pan.baidu.com/s/1tl1B6mZNM2M26Nx-biwAqA 提取码:0278

  1. 解压
# 目录的选择根据自身需求
tar -zvxf scons-2.1.0.tar.gz
tar -zvxf jsoncpp-src-0.5.0.tar.gz
  1. 安装
# 进入刚刚解压的 scons-2.1.0 文件夹中
sudo python setup.py install

# 进入刚刚解压的 jsoncpp-src-0.5.0 文件夹中
sudo scons platform=linux-gcc
  1. 配置
# 将 /jsoncpp-src-0.5.0/include/json 拷贝到 /usr/include
cd jsoncpp-src-0.5.0
sudo cp -r ./include/json /usr/include


# 将 /jsoncpp-src-0.5.0/libs/linux-gcc-11 目录下的 libjson_linux-gcc-5.3.1_libmt.a 拷贝到 /usr/local/lib 下
# 由于 gcc 版本不同,可能解析后名字不同,这里进入 libs目录 ls 查看一下,在逐步进入拷贝
cd ./libs/linux-gcc-11
sudo cp -r libjson_linux-gcc-11_libmt.a /usr/local/lib


# 由于这个静态库太长,重命名一下
sudo mv /usr/local/lib/libjson_linux-gcc-11_libmt.a /usr/local/lib/libjson.a
  1. 测试
#include<iostream>
#include<json/json.h>
using namespace std;
int main()
{
    string test = "{\"id\":2021,\"name\":\"Happy New Year\"}";
    Json::Reader reader;
    Json::Value value;
    if(reader.parse(test,value)) {
        if(!value["id"].isNull()) { 
            cout << value["id"].asInt() << endl;
            cout << value["name"].asString() << endl;
        }
    }
    return 0;
}
g++ test.cpp -o test -L/usr/local/lib -ljson
./test
// 输出
2021
Happy New Year
  1. 配置环境变量
  • 由于每次编译链接都需要指定这个库的搜索路径 /usr/local/lib ,所以将其加到链接器中,执行文件时指定链接器搜索的路径
export LIBRARY_PATH=/usr/local/lib:$LIBRARY_PATH

# 这样之后,就能直接使用
# 注意使用过程中,要去头和去尾,也就是 lib 和 .a 要去掉,json 才是实际库名
g++ test.cpp –o test -ljson
posted @ 2024-09-29 17:59  星竹z  阅读(22)  评论(0编辑  收藏  举报