Linux下Eclipse使用OCCI串連Oracle

來源:互聯網
上載者:User

Linux下使用occi串連Oracle的方法,不需要安裝用戶端
1. 這裡假設你已經安裝成功了oracle10g和Eclipse C++環境。
2. 替換"opt/..../db_1/lib"路徑下的libocci.so.10.1和libocci10.a。(首先下載occi所需要的庫,從這裡可以下載到所需要的兩個檔案)

3.編輯/etc/ld.so.conf,在最後一行輸入:/opt.../db_1/lib
4,執行ldconfig

5.
樣本,根據互連網修改的
//oracle.h(標頭檔)

#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <assert.h>
#include <occi.h>
#include <occiCommon.h>
#include <occiData.h>
#include <occiObjects.h>
#include <occiAQ.h>
#include <occiControl.h>
using namespace oracle::occi;
class dbAccessor
{
public:
dbAccessor();
~dbAccessor();
int get_dbstat();
bool Connect_DB();
void Disconn_DB();
bool ExecuteUpdate(const char* sql);
ResultSet* ExecuteQuery(const char* sql);
void ClearQuery(ResultSet* set);
void Init(const char* dbName,const char* dbUser,const char* dbPass);
void SetDate(unsigned int paramIndex, time_t timeVal);
private:
Environment* m_env;
Connection* m_conn;
Statement*   m_stmt;
const char *m_szUser;
const char *m_szPassword;
const char *m_szDbName;
bool bConnected;
};


=======oracle.cpp=====
#include "oracle.h"
using namespace std;
using namespace oracle::occi;
dbAccessor::dbAccessor()
{
bConnected=false;
m_env=0;
m_conn=0;
m_stmt=0;
}

dbAccessor::~dbAccessor()
{
Disconn_DB();
}
void dbAccessor::Init(const char* dbName,const char* dbUser,const char* dbPass)
{
m_szDbName = dbName;
m_szUser = dbUser;
m_szPassword = dbPass;
}
bool dbAccessor::Connect_DB()
{
if(m_env ==0)
m_env = Environment::createEnvironment();
if(m_conn==0){
try {
   m_conn=m_env->createConnection(m_szUser,m_szPassword,m_szDbName);
    } catch (SQLException& ex) {
   m_conn = 0;
   cout << "connect to database failed: " << ex.getMessage() << endl;
   return false;
    }
}
return true;
}
void dbAccessor:isconn_DB()
{
if(m_stmt!=0 && m_conn!=0)
m_conn->terminateStatement(m_stmt);
if(m_conn!=0 && m_env!=0)
m_env->terminateConnection(m_conn);
}
// 執行資料庫更新操作,www.bkjia.com包括insert、update、delete操作
bool dbAccessor::ExecuteUpdate(const char* sql)
{
bool update_OK = true;
if(sql==0){
exit(1);
}
if(m_conn==0&&m_env==0){
exit(1);
}
try {
m_stmt=m_conn->createStatement(sql);
} catch (SQLException& ex) {
m_stmt = NULL;
cout << "ExecuteUpdate failed: " << ex.getMessage() << endl;
exit(1);
}
update_OK = m_stmt->executeUpdate();
  
return update_OK;
}
//執行資料庫查詢操作,即select操作
ResultSet* dbAccessor::ExecuteQuery(const char* sql)
{
ResultSet* set=0;
if(sql==0){
exit(1);
}
if(m_conn==0&&m_env==0){
exit(1);
}
try {
m_stmt=m_conn->createStatement(sql);
} catch (SQLException& ex) {
m_stmt = NULL;
cout << "ExecuteQuery failed: " << ex.getMessage() << endl;
exit(1);
}
set=m_stmt->executeQuery();
return set;
}

void dbAccessor::ClearQuery(ResultSet* set)
{
if(m_stmt==0){
exit(1);
}
if(set==0){
exit(1);
}
m_stmt->closeResultSet(set);
}
void dbAccessor::SetDate(unsigned int paramIndex, time_t timeVal)
{
cout<<timeVal<<endl;
m_stmt = m_conn->createStatement();
assert(m_stmt != NULL);
tm* timeStruct = localtime(&timeVal);
Date date(m_env,
      timeStruct->tm_year + 1900,
      timeStruct->tm_mon + 1,
      timeStruct->tm_mday,
      timeStruct->tm_hour,
      timeStruct->tm_min,
      (timeStruct->tm_sec == 60) ? 0 : timeStruct->tm_sec);

m_stmt->setDate(paramIndex, date);
}

  • 1
  • 2
  • 下一頁

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.