0 代碼倉庫和視頻
0.1 代碼倉庫
0.2 視頻傳送
https://www.bilibili.com/video/BV1eQ4y1H7CA/?vd_source=3353f83539e46042d8cf76efb177a8e4
10-Centos7環(huán)境下安裝配置OCCI-12.2.0.1版本環(huán)境
1 啟動(dòng)Centos oracle數(shù)據(jù)庫
-
Linux-CentOS8-Oracle19c 安裝詳解-含Navicate遠(yuǎn)程連接配置
-
Navicate遠(yuǎn)程連接Centos-Oracle19c:ORA-12541: TNS: no listener 無監(jiān)聽錯(cuò)誤 - tcping 1521端口關(guān)閉
2 Winsows安裝配置OCCI庫
如何在windows下得到對(duì)應(yīng)的occi的庫和頭文件
- 方法一:
- 從官方下載oracle客戶端安裝程序并且安裝
- 在對(duì)應(yīng)的安裝目錄就可以找到頭文件和庫文件
- 方法二:
- 從官方直接下載官方編譯好的庫和頭文件, 部署到window對(duì)應(yīng)的目錄下即可
- 官方提供的庫需要和vs的版本對(duì)應(yīng), 如果版本不對(duì)應(yīng), 就無法使用
- 關(guān)閉提供的最新的版本支持到 vc14 -> vs2015
- vs2017 0-> vc14.1
2.1 下載文件
- 下載地址:
https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html
下載相關(guān)文件,都解壓縮到instantclient_12_2文件夾下。
2.2 VS 配置
2.2.1 VC++包含目錄
方法一:使用InstantClient
D:\ProgramData\OCCI_InstantClient\instantclient_12_2\sdk\include
方法二:使用對(duì)應(yīng)Windows平臺(tái)下Oracle19c的安裝目錄
C:\Oracle19c\Oracle_19c_db_home\oci\include
2.2.2 VC++庫目錄
方法一:使用InstantClient
D:\ProgramData\OCCI_InstantClient\instantclient_12_2\sdk\lib\msvc\vc14
方法二:使用對(duì)應(yīng)Windows平臺(tái)下Oracle19c的安裝目錄
C:\Oracle19c\Oracle_19c_db_home\oci\lib\msvc\vc14
2.2.3 連接器-附加依賴項(xiàng)
Debug模式下選擇帶_d的lib,發(fā)布的時(shí)候需要改成相應(yīng)的release不帶_d的
oraocci12d.lib
2.2.4 代碼測試-Oracle11g
2.2.4.1 準(zhǔn)備
2.2.4.2 代碼測試
無,因?yàn)榄h(huán)境原因,沒有vs2017,代碼跑不起來。網(wǎng)課上老師也說跑不起來。
3 Centos安裝配置occi庫
3.0 強(qiáng)調(diào)
一定要用普通用戶完成整個(gè)過程,不要使用root用戶。
否則后期使用普通用戶編譯程序的時(shí)候會(huì)找不到頭文件和庫文件。
3.1 下載instantclient庫文件壓縮包
下載地址
https://www.oracle.com/database/technologies/instant-client/downloads.html
1. 19.2版本的occi庫我不會(huì)用,環(huán)境不會(huì)配,不知道是不是不兼容的原因。
然后換成12.2版可用
3.2 windows上解壓
除了版本號(hào),基本都差不多。
3.3 把整個(gè)instantclient_12_2文件夾發(fā)送到普通用戶的目錄下
3.4 將文件移動(dòng)到/opt/instantclient_12_2
sudo mv /home/beza/Desktop/instantclient_12_2 /opt/instantclient_12_2
//普通用戶進(jìn)入/opt/instantclient_12_2文件夾
cd /opt/instantclient_12_2
3.4 創(chuàng)建軟連接
sudo ln -s libclntsh.so.12.1 libclntsh.so
sudo ln -s libclntshcore.so.12.1 libclntshcore.so
sudo ln -s libocci.so.12.1 libocci.so
sudo ldconfig
3.5 配置環(huán)境變量
將以下環(huán)境變量寫入/etc/profile中,對(duì)應(yīng)的路徑與上傳的文件夾路徑一致。
sudo vim /etc/profile
# OCCI環(huán)境變量的修改
export OCCI_HOME=/opt/instantclient_12_2
export OCCI_INCLUDE_DIR=$OCCI_HOME/sdk/include
export OCCI_LIBRARY_PATH=$OCCI_HOME
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$OCCI_LIBRARY_PATH
#程序編譯時(shí)搜索的庫目錄
export LIBRARY_PATH=$LIBRARY_PATH:$OCCI_LIBRARY_PATH
#程序編譯時(shí)搜索的頭文件目錄
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:$OCCI_INCLUDE_DIR
再 source一下,重新加載
source /etc/profile
在普通用戶模式下重新配置protobuf的環(huán)境,再次新環(huán)境變量
再 source一下,重新加載
source ~/.bash_profile
留個(gè)疑問
為什么我的程序root用戶能加載,但是普通用戶缺不可以
3.5 測試
Oracle19c在Centos上安裝時(shí)已經(jīng)創(chuàng)建用戶出c##beza
,密碼“123456”,和表dept
.
3.5.1 源代碼
#define _GLIBCXX_USE_CXX11_ABI 0
#include <iostream>
#include <occi.h>
using namespace std;
using namespace oracle::occi;
int main()
{
// 初始化連接環(huán)境
Environment* env = Environment::createEnvironment();
// 根據(jù)環(huán)境對(duì)象, 創(chuàng)建一個(gè)連接數(shù)據(jù)庫服務(wù)器的實(shí)例
// 參數(shù): 用戶名->oracle數(shù)據(jù)庫用戶名, 密碼, 連接串
// 連接串(oracle服務(wù)器地址): IP:端口/實(shí)例名
// 192.168.21.23:1521/orcl
Connection* conn = env->createConnection("c##beza", "123456", "192.168.111.133:1521/ORCLCDB");
printf("conn success...\n");
// 主要的業(yè)務(wù)邏輯 -> 數(shù)據(jù)庫操作-> 使用sql語句
// 創(chuàng)建能夠操作sql的對(duì)象
Statement* st = conn->createStatement();
// 給st對(duì)象指定要操作的sql語句
// 假設(shè)要查詢
string sql = "select * from dept";
printf("before get the result\n");
// 知識(shí)設(shè)置, 沒有查詢
st->setSQL(sql);
// 執(zhí)行sql語句
// 返回ResultSet對(duì)象, 這個(gè)類中保存了查詢到的結(jié)果
ResultSet* result = st->executeQuery();
// 遍歷結(jié)果集, 使用next()
while (result->next())
{
// 將當(dāng)前記錄的字段值取出
// 看數(shù)據(jù)庫表的設(shè)計(jì) -> 需要要知道每個(gè)字段對(duì)應(yīng)的數(shù)據(jù)類型
// 取值的方法: get數(shù)據(jù)類型(字段在數(shù)據(jù)表中的位置[從1開始算]);
cout << "no: " << result->getInt(1) << ","
<< "name: " << result->getString(2) << ","
<< "location: " << result->getString(3) << endl;
}
// 關(guān)閉查詢的結(jié)果集 -> 釋放資源closeResult
st->closeResultSet(result);
printf("before insert new value\n");
// 數(shù)據(jù)庫插入
sql = "insert into dept values(1, 'Beza', 'California')";
st->setSQL(sql);
int ret = st->executeUpdate();
cout << "insert return value: " << ret << endl;
// 銷毀statment對(duì)象
conn->terminateStatement(st);
// 銷毀連接對(duì)象
env->terminateConnection(conn);
// 釋放創(chuàng)建的環(huán)境對(duì)象
Environment::terminateEnvironment(env);
return 0;
}
3.5.2 編譯指令
g++ occitest.cpp -locci -lclntsh
3.5.3 結(jié)果
4 編譯時(shí)候的相關(guān)報(bào)錯(cuò)
4.1 ORA-24960: the attribute OCI_ATTR_USERNAME is greater than the maximum allowable length of 255
原因參考下文:
Oracle19c/OCCI-12.2編譯cpp代碼報(bào)錯(cuò):ORA-24960:the attribute OCI_ATTR_USERNAME is greater than the maximum文章來源:http://www.zghlxwxcb.cn/news/detail-717922.html
4.2 編譯不通過
GCC編譯宏_GLIBCXX_USE_CXX11_ABI背景分析和實(shí)現(xiàn)原理文章來源地址http://www.zghlxwxcb.cn/news/detail-717922.html
到了這里,關(guān)于Openssl數(shù)據(jù)安全傳輸平臺(tái)014:OCCI環(huán)境搭建和使用:Centos8-Oracle19c代碼跑通 + Window代碼沒跑通(不影響本項(xiàng)目)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!