2017-10-17 134 views
-1

我試圖將我的C++程序連接到Oracle數據庫(12.2)。將C++程序連接到Oracle

我的C++程序(我用克的Ubuntu ++編譯器),

#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 

我是新來的數據庫連接。 你能幫我解決嗎?

+0

它與數據庫連接無關,但它可能與缺少的庫有關。 – mustaccio

回答

0

Oracle's網站,這裏是一個有效的例子:

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); 

您的代碼似乎是在正確的方向。所以,似乎有些圖書館不見了!

再次,從different page on Oracle's website,這裏需要的庫:

  • OCI即時客戶端數據共享庫(libociei.so在Linux和UNIX和oraociei12.dll在Windows上);此文件的正確安裝確定你是在即時客戶端模式(在Linux和UNIX libclntsh.so.12.2和OCI.DLL在Windows上)
  • 客戶端代碼庫
  • 安全庫(libnnz12.so在Linux和UNIX和Linux和UNIX在Windows orannzsbb12.dll)
  • OCCI庫(libocci.so.12.2和oraocci12.dll在Windows上)

確保這些庫安裝到計算機上。

+0

我已經安裝了這些庫。但是我仍然得到同樣的錯誤。 – BSK