在ubuntu16.04上配置soci来连接Oracle、MySQL、PostgreSQL和odbc(连接达梦)
原理
soci是github上基于C++的连接多种数据库的开源项目,lisence是和boost一样。用它来使用C++连接数据库会比较方便。
参考
官网 有比较详细的安装介绍,但是我还是以我的实际经历来记录一下安装过程。
安装前提
保证你的ubuntu上安装了:
- C++ compiler: GCC, Microsoft Visual C++, LLVM/clang
- CMake 2.8+ - in order to use build configuration for CMake
- Boost C++ Libraries: DateTime, Fusion, Optional, Preprocessor, Tuple
这些核心的基础库。
然后安装Oracle、MySQL、PostgreSQL和ODBC这些每个不同数据库的client端接口,而且都是基于C的,要有相应的include和lib文件:
- DB2 Call Level Interface (CLI)
- Firebird client library
- mysqlclient - C API to MySQL
- ODBC (Open Database Connectivity) implementation: Microsoft ODBC, iODBC, unixODBC
- Oracle Call Interface (OCI)
- libpq - C API to PostgreSQL
- SQLite 3 library
其中安装Oracle的时候比较麻烦:
- 参考oracle官网
- 关键是要 sudo apt-get install libaio1 而不是libaio。
- 编程解决:
- 在.zshrc(有的是.bashrc)里配置:
export TNS_ADMIN=/opt/oracle/product/11.2.0/dbhome_1/network/admin/
这是为了配置连接server的service配置。 - 配置tnsnames.ora文件,具体含义参考:ORACLE配置,修改tnsnames.ora文件实例 我的配置为这样:
ORCL= (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=TCP)(HOST=10.108.208.175)(PORT=1521)) ) (CONNECT_DATA= (SERVER=DEDICATED) (SERVICE_NAME=orcl) ) )
- 代码实例:
- 在.zshrc(有的是.bashrc)里配置:
- main.cpp:
#include <soci/soci.h>
#include<soci/oracle/soci-oracle.h>
#include<iostream>
#include<istream>
#include<ostream>
#include<string>
#include<exception>
#include<unistd.h>
using namespace std;
using namespace soci;
int main() {
session sql(oracle,"service=orcl user=iovuser password=iov123");
cout << "has connected!!"<<endl;
// string sql_str = "select count(*) from cf1";
string sql_str = "insert into cf1 (id, field_0) values (00, 'asd')";
sql << sql_str;
}
- makefile:
all: main.cpp
g++ -std=c++11 -Wall -g -o main main.cpp -I/opt/oracle/product/11.2.0/dbhome_1/rdbms/public/ -L/usr/local/lib64/ -lsoci_core -lsoci_oracle -ldl
clean:
步骤:
- git clone https://github.com/SOCI/soci.git 到某一个目录下
- 在当前目录下mkdir build 并cd build
- 执行命令:
cmake -G "Unix Makefiles" -DWITH_BOOST=ON -DSOCI_TEST=ON -DWITH_ORACLE=ON -DORACLE_INCLUDE_DIR="/opt/oracle/product/11.2.0/dbhome_1/rdbms/public/" -DSOCI_ORACLE=ON -DWITH_DB2=OFF -DWITH_FIERBIRD=OFF -DWITH_SQLITE3=OFF -DPOSTGRESQL_INCLUDE_DIR=/usr/include/postgresql -DORACLE_LIBRARIES=/opt/oracle/instantclient_12_2 ../soci
- 上面命令中,系统不能自己找到的path要自己设定,我就是设置不用的数据库为OFF,然后设置oracle的path为OCI的安装路径。
- 达梦连接数据库是用odbc的,要安装好ODBC和配置好/etc/odbc.ini 和/etc/odbcnst.ini文件
- 然后在build目录下执行make和 sudo make install就完成了安装