天天看點

Linux下C++通過SOCI連接配接到GBase 8s資料庫

作業系統:CentOS 7.8 64-bit

軟體需求:

SOCI 4.0.1

GBase 8s CSDK

1,安裝CSDK

手工安裝CSDK,或者下載下傳免安裝版本的CSDK

下載下傳位址:

https://gbasedbt.com/odbc/GBase8s_3.0-Linux64-ODBC-Driver.tar.gz
[[email protected] ~]# wget https://gbasedbt.com/odbc/GBase8s_3.0-Linux64-ODBC-Driver.tar.gz

# 解壓至指定目錄,如/opt,生成/opt/gbase8s-odbc-driver目錄。
[[email protected] ~]# tar -C /opt -zxf GBase8s_3.0-Linux64-ODBC-Driver.tar.gz 
           

設定環境變量檔案(也可以寫入到/etc/profile中)

# 增加GBASEDBTDIR,LD_LIBRARY_PATH
export GBASEDBTDIR=/opt/gbase8s-odbc-driver
export LD_LIBRARY_PATH=$GBASEDBTDIR/lib:$GBASEDBTDIR/lib/esql:$GBASEDBTDIR/lib/cli:$GBASEDBTDIR/lib/c++:$LD_LIBRARY_PATH
           

2,安裝SOCI

SOCI需要預先安裝cmake 2.8+(建議cmake3), gcc-c++

下載下傳位址:

https://github.com/SOCI/soci.git

或者https://sourceforge.net/projects/soci/files/soci/ (建議)

[[email protected] ~]# wget https://netactuate.dl.sourceforge.net/project/soci/soci/soci-4.0.1/soci-4.0.1.tar.gz

[[email protected] ~]# tar -zxvf soci-4.0.1.tar.gz && cd soci-4.0.1
           

設定環境變量檔案(也可以寫入到/etc/profile中)

# 增加LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH
           

編譯安裝SOCI,建議使用cmake3

[[email protected] soci-4.0.1]# cmake3 -DWITH_BOOST=ON -DSOCI_TESTS=ON

[[email protected] soci-4.0.1]# make

[[email protected] soci-4.0.1]# make install
           

3,編寫測試程式腳本TestSOCIOdbc.cpp

// filename: TestSOCIOdbc.cpp
#include <soci/soci.h>
#include <soci/odbc/soci-odbc.h>
#include<iostream>
#include<istream>
#include<ostream>
#include<string>
#include<exception>

using namespace std;
using namespace soci;

int main() {
    cout<<"SOCI 測試程式開始運作.\n\n";
    try {
        session sql(odbc,"Driver=/opt/gbase8s-odbc-driver/lib/cli/iclit09b.so;HOST=a02.gbasedbt.com;SERV=9088;PROT=onsoctcp;SRVR=gbase01;DB=testdb;U
ID=gbasedbt;PWD=GBase123;DLOC=zh_CN.utf8;CLOC=zh_CN.utf8");
        // 删除和建立表
        sql<< "drop table if exists company";
        sql<< "create table company(coid serial,coname varchar(255),coaddr varchar(255))";

        // 插入記錄
        string cn = "南大通用";
        string ca = "天津市海泰綠色産業基地";
        sql<< "insert into company(coname,coaddr) values (:cn, :ca)", use(cn), use(ca);

        cn = "南大通用北京分公司";
        ca = "北京市朝陽區太陽宮";
        sql<< "insert into company(coname,coaddr) values (:cn, :ca)", use(cn), use(ca);

        // 查詢記錄
        rowset<row> rs = (sql.prepare << "select * from company");
        for (rowset<row>::iterator it = rs.begin(); it != rs.end(); ++it)
        {
            const row& row = *it;
            cout << "coid:" << row.get<int>(0)
                 << " coname:" << row.get<string>(1)
                 << " coaddr:" << row.get<string>(2) << endl;
        }
    } catch (exception const &e) {
        cerr<<"Error:" <<e.what()<<endl;
    }
    cout<<"\nSOCI 測試程式結束運作.\n";
}

           

4,編譯C++程式,測試連接配接GBase 8s資料庫測試

[[email protected] ~]# g++ -Wall -g -o TestSOCIOdbc TestSOCIOdbc.cpp -lsoci_core -lsoci_odbc

[[email protected] ~]# ./TestSOCIOdbc
SOCI 測試程式開始運作.

coid:1 coname:南大通用 coaddr:天津市海泰綠色産業基地
coid:2 coname:南大通用北京分公司 coaddr:北京市朝陽區太陽宮

SOCI 測試程式結束運作.