1

我正在尝试将我的 C++ 程序连接到 Oracle 数据库(12.2)。

我的 C++ 程序是(我在 ubuntu 中使用 g++ 编译器),

#include <occi.h> 
#include <iostream> 

using namespace std;

int main()
{   oracle::occi::Environment *env = oracle::occi::Environment::createEnvironment();
    oracle::occi::Connection *conn = env->createConnection("bsk", "oraclepass");
    env->terminateConnection(conn);
    oracle::occi::Environment::terminateEnvironment(env);
}

我收到错误

undefined reference to `oracle::occi::Environment::createEnvironment(oracle::occi::Environment::Mode, void*, void* (*)(void*, unsigned long), void* (*)(void*, void*, unsigned long), void (*)(void*, void*))'
Employees.cpp:(.text+0x169): undefined reference to `oracle::occi::Environment::terminateEnvironment(oracle::occi::Environment*)'
collect2: error: ld returned 1 exit status

我是数据库连接的新手。你能帮我解决这个问题吗?

4

2 回答 2

0

Oracle 的网站上,这是一个有效的示例:

const string userName = "HR";
const string password = "password";
const string connectString = "";

Environment *env = Environment::createEnvironment();

{
   Connection *conn = env->createConnection(userName, password, connectString);
   Statement *stmt = conn->createStatement("SELECT blobcol FROM mytable");
   ResultSet *rs = stmt->executeQuery();
   rs->next();
   Blob b = rs->getBlob(1);
   cout << "Length of BLOB : " << b.length();
   ...
   stmt->closeResultSet(rs);
   conn->terminateStatement(stmt);
   env->terminateConnection(conn);
}

Environment::terminateEnvironment(env);

您的代码似乎朝着正确的方向发展。因此,似乎缺少一些库!

同样,从Oracle 网站上的不同页面,这里是所需的库:

  • OCI Instant Client 数据共享库(Linux 和 UNIX 上的 libociei.so 和 Windows 上的 oraociei12.dll)此文件的正确安装确定您是否在 Instant Client 模式下运行
  • 客户端代码库(Linux 和 UNIX 上的libclntsh.so.12.2和 Windows 上的 oci.dll)
  • 安全库(Linux 和 UNIX 上的 libnnz12.so 和 Windows 上的 orannzsbb12.dll
  • OCCI 库(Linux 和 UNIX 上的 libocci.so.12.2 和 Windows 上的 oraocci12.dll

确保这些库已安装在您的机器上。

于 2017-10-17T14:24:18.950 回答
0

试试这个

$ g++ sample.C -I/opt/oracle/11.0.2/rdbms/public/ -L/opt/oracle/11.0.2/lib/ -locci -lclntsh

替换/opt/oracle/11.0.2为您的 oracle 主路径,它应该可以工作。

从这里找到示例代码

于 2018-11-01T11:52:41.007 回答