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

news2024/11/16 5:56:35

文章目录

  • 0 代码仓库
  • 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 代码仓库

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.so

sudo ldconfig

在这里插入图片描述

3.5 配置环境变量

将以下环境变量写入/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

在普通用户模式下更新环境变量

在这里插入图片描述再 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/orcl
	Connection* 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;
	}

	// 关闭查询的结果集 -> 释放资源closeResult
	st->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背景分析和实现原理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1151226.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国产思仪 1765A/B/C/D/E程控直流电源

1765A/B/C/D/E程控直流电源 产品综述 1765系列程控直流电源主要用于储能设备系统的测量分析和自动测试系统的加电测试。作为一种双象限直流电源&#xff0c;将电源输出和功率吸收的功能完全集成到单一系统中&#xff0c;可实现电源与负载功能的无缝转换&#xff0c;解决双向能源…

RT-Thread 内存管理(一)

内存管理 在计算系统中&#xff0c;通常存储空间可以分为两种&#xff1a;内部存储空间和外部存储空间。 内部存储空间通常访问速度比较快&#xff0c;能够按照变量地址随机访问&#xff0c;也就是我们通常所说的RAM&#xff08;随机访问存储器&#xff09;&#xff0c;可以把…

Linux gzip命令:压缩文件或目录

gzip 是 Linux 系统中经常用来对文件进行压缩和解压缩的命令&#xff0c;通过此命令压缩得到的新文件&#xff0c;其扩展名通常标记为“.gz”。 再强调一下&#xff0c;gzip 命令只能用来压缩文件&#xff0c;不能压缩目录&#xff0c;即便指定了目录&#xff0c;也只能压缩目录…

使用WebDav服务远程操作本地服务器?试试群晖NAS【内网穿透】

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《速学数据结构》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 1. 在群晖套件中心安装WebDav Server套件1.1 安装完成后&#xff0c;启动webdav服务&#xff0c;并勾选HTTP复选…

Linux 文件系统简介

文章目录 一、磁盘简介1.1 简介1.2 机械硬盘与固态硬盘1.2.1 机械磁盘&#xff08;HDD&#xff09;1.2.2 固态磁盘&#xff08;SSD&#xff09;1.2.3 I/O操作 二、文件系统简介2.1. 简介2.2 文件系统特点2.3 Linux文件系统 三、文件数据存储方式3.1 连续存储3.2 链接表存储3.3 …

Ansible中常用模块

目录 一、Ansible实现管理的方式 二、Ad-Hoc执行方式中如何获得帮助 三、Ansible命令运行方式及常用参数 四、Ansible的基本颜色代表信 五、Ansible中的常用模块 1、command模块 2、shell模块、script模块 3、copy模块、fetch模块 4、file模块 5、archive模块、unarc…

FPGA_Signal TapII 逻辑分析仪 在线信号波形抓取

FPGA_Signal TapII 逻辑分析仪 在线信号波形抓取 由于一些工程的仿真文件不易产生&#xff0c;所以我们可以利用 quartus 软件自带的 SignalTap 工具对波形进行抓取 对各个信号进行分析处理&#xff0c;让电子器件与FPGA进行正常通讯工作&#xff0c;也验证所绘制的波形图是否一…

Spring面试题:(一)IoC,DI,AOP和BeanFactory,ApplicationContext

IoC&#xff0c;DI&#xff0c;AOP思想 IOC就是控制反转&#xff0c;是指创建对象的控制权的转移。以前创建对象的主动权和时机是由自己把控的&#xff0c;而现在这种权力转移到Spring容器中&#xff0c;并由容器根据配置文件去创建实例和管理各个实例之间的依赖关系。对象与对…

NSSCTF做题第十页(1)

[GXYCTF 2019]禁止套娃 看源代码也没什么东西&#xff0c;扫一下看看 发现了git泄露 话不多说直接开整 下载下来了 flag.php 还是代码审计 <?php include "flag.php"; echo "flag在哪里呢&#xff1f;<br>"; if(isset($_GET[exp])){ if (!preg_…

怎么看电脑有几个cpu?还有cpu是几核的?

一、怎么查看电脑有几个cpu 电脑CPU是电脑的核心&#xff0c;CPU是中央处理器&#xff0c;是电脑进行线程调度的关键&#xff0c;可以通过查看电脑CPU性能个数可以判定一个电脑的性能。今天小编介绍下如何查看电脑CPU个数。 简单的方式直接查看CPU个数。启动电脑后&#xff0c;…

喜讯!合合信息顺利通过CMMI3级评估

近日&#xff0c;在擎标顾问团的咨询辅导下&#xff0c;上海合合信息科技股份有限公司&#xff08;简称“合合信息”&#xff09;顺利通过了CMMI3级评估。CMMI是国际上最流行、最实用的一种软件生产过程标准和软件企业成熟度等级认证的标准&#xff0c;通过该认证表明企业在开发…

Cesium笔记(0):Cesium简介和本地运行

一、Cesium介绍 是国外一个基于JavaScript编写的使用WebGL的地图引擎开源程序&#xff0c;可以免费用于商业和非商业 二、特点 支持3D,2D,2.5D形式的地图展示可以自行绘制图形&#xff0c;高亮区域&#xff0c;并提供良好的触摸支持支持绝大多数的浏览器和mobile动态地理空间…

【Python百练——第2练】使用Python做一个猜数字小游戏

&#x1f490;作者&#xff1a;insist-- &#x1f490;个人主页&#xff1a;insist-- 的个人主页 理想主义的花&#xff0c;最终会盛开在浪漫主义的土壤里&#xff0c;我们的热情永远不会熄灭&#xff0c;在现实平凡中&#xff0c;我们终将上岸&#xff0c;阳光万里 ❤️欢迎点…

洛谷 B2009 计算 (a+b)/c 的值 C++代码

目录 题目描述 AC Code 切记 题目描述 题目网址&#xff1a;计算 (ab)/c 的值 - 洛谷 AC Code #include<bits/stdc.h> using namespace std; int main() {int a,b,c;cin>>a>>b>>c;cout<<(ab)/c<<endl;return 0; } 切记 不要复制题…

实战之巧用header头

案例&#xff1a; 遇到过三次 一次是更改accept&#xff0c;获取到tomcat的绝对路径&#xff0c;结合其他漏洞获取到shell。 一次是更改accept&#xff0c;越权获取到管理员的MD5加密&#xff0c;最后接管超管权限。 一次是更改accept&#xff0c;结合参数获取到key。 这里以越…

vscode免密码认证ssh连接virtual box虚拟机

文章目录 安装软件virtual box配置vscode配置创建并传递密钥连接虚拟机最后 安装软件 安装vscode和virtual box&#xff0c;直接官网下载对应软件包&#xff0c;下载之后&#xff0c;点击执行&#xff0c;最后傻瓜式下一步安装即可 virtual box配置 创建一个仅主机网络的网卡 …

【Linux】第七站:vim的使用以及配置

文章目录 一、vim1.vim的介绍2.vim基本使用3.vim的命令模式常用命令4.底行模式 二、vim的配置 一、vim 1.vim的介绍 vim编辑器&#xff0c;用来文本编写&#xff0c;可以写代码 它是一个多模式的编辑器 它有很多的模&#xff0c;不过我们暂时先只考虑这三种模式 命令模式插入模…

Java基础知识之反射机制详解

一、什么是反射机制? 反射机制是指在运行时动态地获取类的信息,并能够通过这些信息对类的对象进行操作。Java中的反射机制包括获取类信息、获取成员信息、创建对象、调用方法等操作。通过反射机制,我们可以在运行时动态地了解类的结构、属性和方法等信息,从而实现对类的动态…

JavaScript简介:探索Web开发中的魔力

目录 历史与发展 特点与优势 特点与功能 简单易学 客户端脚本语言 跨平台与兼容性 应用领域 总结 JavaScript是一种高级的、解释型的编程语言&#xff0c;用于在网页上实现交互和动态效果。它广泛应用于前端开发中&#xff0c;是构建现代Web应用的核心技术之一。JavaScrip…

宠物用品小程序

近年来&#xff0c;越来越多的人选择将宠物视为家庭的一员&#xff0c;为宠物购买各种用品成为了一项重要的消费活动。因此&#xff0c;宠物用品小程序应运而生&#xff0c;为消费者提供了一个便捷的购买平台&#xff0c;同时也为宠物带来了更加幸福的生活。 登录乔拓云平台进入…