当前位置: 首页 > news >正文

Openssl数据安全传输平台014:OCCI环境搭建和使用:Centos8-Oracle19c代码跑通 + Window代码没跑通(不影响本项目)

文章目录

  • 0 代码仓库和视频
  • 0.1 代码仓库
  • 0.2 视频传送
  • 1 启动Centos oracle数据库
  • 2 Winsows安装配置OCCI库
    • 2.1 下载文件
    • 2.2 VS 配置
    • 2.2.1 VC++包含目录
    • 2.2.2 VC++库目录
    • 2.2.3 连接器-附加依赖项
    • 2.2.4 代码测试-Oracle11g
      • 2.2.4.1 准备
      • 2.2.4.2 代码测试
  • 3 Centos安装配置occi库
    • 3.0 强调
    • 3.1 下载instantclient库文件压缩包
    • 3.2 windows上解压
    • 3.3 把整个instantclient_12_2文件夹发送到普通用户的目录下
    • 3.4 将文件移动到/opt/instantclient_12_2
    • 3.4 创建软连接
    • 3.5 配置环境变量
  • 留个疑问
    • 3.5 测试
      • 3.5.1 源代码
      • 3.5.2 编译指令
      • 3.5.3 结果
    • 4 编译时候的相关报错
    • 4.1 ORA-24960: the attribute OCI_ATTR_USERNAME is greater than the maximum allowable length of 255
    • 4.2 编译不通过

0 代码仓库和视频

0.1 代码仓库

0.2 视频传送

https://www.bilibili.com/video/BV1eQ4y1H7CA/?vd_source=3353f83539e46042d8cf76efb177a8e4

10-Centos7环境下安装配置OCCI-12.2.0.1版本环境

1 启动Centos oracle数据库

  • Linux-CentOS8-Oracle19c 安装详解-含Navicate远程连接配置

  • Navicate远程连接Centos-Oracle19c:ORA-12541: TNS: no listener 无监听错误 - tcping 1521端口关闭

2 Winsows安装配置OCCI库

如何在windows下得到对应的occi的库和头文件

  • 方法一:
  • 从官方下载oracle客户端安装程序并且安装
    • 在对应的安装目录就可以找到头文件和库文件
  • 方法二:
  • 从官方直接下载官方编译好的库和头文件, 部署到window对应的目录下即可
  • 官方提供的库需要和vs的版本对应, 如果版本不对应, 就无法使用
    • 关闭提供的最新的版本支持到 vc14 -> vs2015
      • vs2017 0-> vc14.1

2.1 下载文件

  • 下载地址:
    https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html

下载相关文件,都解压缩到instantclient_12_2文件夹下。

在这里插入图片描述

2.2 VS 配置

2.2.1 VC++包含目录

方法一:使用InstantClient

D:\ProgramData\OCCI_InstantClient\instantclient_12_2\sdk\include

在这里插入图片描述
方法二:使用对应Windows平台下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

在这里插入图片描述
在这里插入图片描述

方法二:使用对应Windows平台下Oracle19c的安装目录

C:\Oracle19c\Oracle_19c_db_home\oci\lib\msvc\vc14

在这里插入图片描述在这里插入图片描述

2.2.3 连接器-附加依赖项

Debug模式下选择带_d的lib,发布的时候需要改成相应的release不带_d的

oraocci12d.lib

在这里插入图片描述

2.2.4 代码测试-Oracle11g

2.2.4.1 准备

在这里插入图片描述在这里插入图片描述在这里插入图片描述

2.2.4.2 代码测试

无,因为环境原因,没有vs2017,代码跑不起来。网课上老师也说跑不起来。

3 Centos安装配置occi库

3.0 强调

一定要用普通用户完成整个过程,不要使用root用户。
否则后期使用普通用户编译程序的时候会找不到头文件和库文件。

3.1 下载instantclient库文件压缩包

下载地址
https://www.oracle.com/database/technologies/instant-client/downloads.html
在这里插入图片描述

1. 19.2版本的occi库我不会用,环境不会配,不知道是不是不兼容的原因。

然后换成12.2版可用
在这里插入图片描述

3.2 windows上解压

除了版本号,基本都差不多。
在这里插入图片描述

3.3 把整个instantclient_12_2文件夹发送到普通用户的目录下

在这里插入图片描述

3.4 将文件移动到/opt/instantclient_12_2

sudo mv /home/beza/Desktop/instantclient_12_2 /opt/instantclient_12_2//普通用户进入/opt/instantclient_12_2文件夹
cd /opt/instantclient_12_2

3.4 创建软连接

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.sosudo ldconfig

在这里插入图片描述

3.5 配置环境变量

将以下环境变量写入/etc/profile中,对应的路径与上传的文件夹路径一致。

sudo vim /etc/profile

在这里插入图片描述

# OCCI环境变量的修改
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
#程序编译时搜索的库目录
export LIBRARY_PATH=$LIBRARY_PATH:$OCCI_LIBRARY_PATH
#程序编译时搜索的头文件目录
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:$OCCI_INCLUDE_DIR

再 source一下,重新加载

source /etc/profile

在普通用户模式下重新配置protobuf的环境,再次新环境变量

在这里插入图片描述再 source一下,重新加载

source ~/.bash_profile

留个疑问

为什么我的程序root用户能加载,但是普通用户缺不可以

3.5 测试

Oracle19c在Centos上安装时已经创建用户出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()
{// 初始化连接环境Environment* env = Environment::createEnvironment();// 根据环境对象, 创建一个连接数据库服务器的实例// 参数: 用户名->oracle数据库用户名, 密码, 连接串// 连接串(oracle服务器地址): IP:端口/实例名// 192.168.21.23:1521/orclConnection* conn = env->createConnection("c##beza", "123456", "192.168.111.133:1521/ORCLCDB");printf("conn success...\n");// 主要的业务逻辑 -> 数据库操作-> 使用sql语句// 创建能够操作sql的对象Statement* st = conn->createStatement();// 给st对象指定要操作的sql语句// 假设要查询string sql = "select * from dept";printf("before get the result\n");// 知识设置, 没有查询st->setSQL(sql);// 执行sql语句// 返回ResultSet对象, 这个类中保存了查询到的结果ResultSet* result =  st->executeQuery(); // 遍历结果集, 使用next()while (result->next()){// 将当前记录的字段值取出// 看数据库表的设计 -> 需要要知道每个字段对应的数据类型// 取值的方法: get数据类型(字段在数据表中的位置[从1开始算]);cout << "no: " << result->getInt(1) << ","<< "name: " << result->getString(2) << ","<< "location: " << result->getString(3) << endl;}// 关闭查询的结果集 -> 释放资源closeResultst->closeResultSet(result);printf("before insert new value\n");// 数据库插入sql = "insert into dept values(1, 'Beza', 'California')";st->setSQL(sql);int ret = st->executeUpdate();cout << "insert return value: " << ret << endl;// 销毁statment对象conn->terminateStatement(st);// 销毁连接对象env->terminateConnection(conn);// 释放创建的环境对象Environment::terminateEnvironment(env);return 0;
}

3.5.2 编译指令

g++ occitest.cpp -locci -lclntsh

3.5.3 结果

在这里插入图片描述
在这里插入图片描述

4 编译时候的相关报错

4.1 ORA-24960: the attribute OCI_ATTR_USERNAME is greater than the maximum allowable length of 255

原因参考下文:

Oracle19c/OCCI-12.2编译cpp代码报错:ORA-24960:the attribute OCI_ATTR_USERNAME is greater than the maximum

4.2 编译不通过

GCC编译宏_GLIBCXX_USE_CXX11_ABI背景分析和实现原理

相关文章:

  • kubernetes-service微服务
  • [论文精读]How Powerful are Graph Neural Networks?
  • delete,drop,truncated区别
  • docker环境安装+maven依赖继承问题
  • 【k8s】pod详解
  • Explaining and harnessing adversarial examples
  • 目标检测 YOLOv5 预训练模型下载方法
  • 2023年四川省网络与信息安全技能大赛 决赛个人赛Writeup
  • STM32F40EZT6 PWM可控制电压原理
  • 61. 旋转链表、Leetcode的Python实现
  • IntelliJ IDEA快捷键sout不生效
  • 探索控制领域:从电视遥控器到自动驾驶【基础概念理解、应用实例】
  • Ubuntu 搭建 DHCP ivp6 server 步骤
  • 精品Python考研调配系统考试成绩招生调剂-爬虫可视化大屏
  • 华为OD机试 - 统计射击比赛成绩 - 逻辑分析(Java 2023 B卷 100分)
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 2019年如何成为全栈工程师?
  • JavaScript新鲜事·第5期
  • React Transition Group -- Transition 组件
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 服务器从安装到部署全过程(二)
  • 使用权重正则化较少模型过拟合
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 移动端唤起键盘时取消position:fixed定位
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​linux启动进程的方式
  • ​如何防止网络攻击?
  • #LLM入门|Prompt#3.3_存储_Memory
  • (1) caustics\
  • (10)STL算法之搜索(二) 二分查找
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (2)(2.10) LTM telemetry
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)jdk与jre的区别
  • .cfg\.dat\.mak(持续补充)
  • .Net 4.0并行库实用性演练
  • .NET CLR Hosting 简介
  • /bin/bash^M: bad interpreter: No such file or directory
  • @Autowired自动装配
  • @JSONField或@JsonProperty注解使用
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [].shift.call( arguments ) 和 [].slice.call( arguments )
  • []sim300 GPRS数据收发程序
  • [3300万人的聊天室] 作为产品的上游公司该如何?
  • [Android View] 可绘制形状 (Shape Xml)
  • [android] 切换界面的通用处理
  • [bzoj4240] 有趣的家庭菜园
  • [C++进阶篇]STL中vector的使用
  • [cocos creator]EditBox,editing-return事件,清空输入框
  • [CSS]盒子模型