北京免费发布企业信息网站,正规的网站建设专业公司,一般通过什么饮食摄入钙,手机app制作报价文章目录 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 代码测试-Oracle11g2.2.4.1 准备2.2.4.2 代码测试 3 Centos安装配置occi库3.0 强调3.1 下载instantclient库文件压缩… 文章目录 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 代码测试-Oracle11g2.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_23.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 2554.2 编译不通过 0 代码仓库
1 启动Centos oracle数据库 Linux-CentOS8-Oracle19c 安装详解-含Navicate远程连接配置 Navicate远程连接Centos-Oracle19cORA-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_23.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 ldconfig3.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/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背景分析和实现原理