基於C++11的資料庫連線池環境配置

星竹z發表於2024-09-29

歡迎訪問我的另一個部落格: 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

相關文章