2009-04-19

linux下使用occi链接oracle11

系统环境:
OS: Linux Windows 2.6.27-12-generic #1 SMP Thu Feb 5 09:26:35 UTC 2009 i686 GNU/Linux
Oracle:Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
GCC:gcc (Ubuntu 4.3.2-1ubuntu12) 4.3.2

用户环境:
export JAVA_HOME=/usr/share/java
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=/opt/oracle/ora11
export ORACLE_OWNER=oracle
export ORACLE_SID=tmp
export ORACLE_TERM=xterm
export PATH=$JAVA_HOME/bin:$ORACLE_HOME/bin:$PATH

步骤:
1.建立数据库表usr
2.建立C++源文件,occi.cpp
#include <iostream>
#include <algorithm>
#include <occi.h>

using namespace std;
using namespace oracle::occi;

class OcciDemo {
private:
    Environment *env;
    Connection *conn;
public:
    OcciDemo(string user, string passwd, string dbname) {
        env = Environment::createEnvironment(Environment::OBJECT);
        conn = env->createConnection(user, passwd, dbname);
    }

    ~OcciDemo() {
        env->terminateConnection(conn);
        Environment::terminateEnvironment(env);
    }

    void displayTable(string tablename) {
        cout << "Displaying the table " << tablename << endl;
        Statement *stmt = conn->createStatement("select id from usr");
        ResultSet *rs = stmt->executeQuery();
        try {
            while (rs->next()) {
                cout << rs->getInt(1) << endl;
            }
        } catch (SQLException se) {
            cout << "Error number: " << se.getErrorCode() << endl;
            cout << se.getMessage() << endl;
        }
    }
};

int main(void) {
    OcciDemo *occi = new OcciDemo("hanchen", "123456", "orcl");
    occi->displayTable("usr");
    return 0;
}

3.建立makefile
CC
=g++
ORACLE_HOME=/opt/oracle/ora11
INCLUDES=$(ORACLE_HOME)/rdbms/public
LIBS=$(ORACLE_HOME)/lib

CXXFLAGS=-O2 -Wall -I$(INCLUDES)

TARGET=occi

all:$(TARGET)

occi:occi.o
    $(CC) -o $@ $^ -L$(LIBS) -locci -ldl -lclntsh
    
hash:hash.o
    $(CC) -o $@ $^ -L$(LIBS)
    
clean:
    rm -rf *.o
    rm -rf $(TARGET)

4. 如果编译错误,请检查-I参数,如果链接错误,请检查参数-L与-ldl -lclntsh,如果运行错误,请继续5
5.编辑/etc/ld.so.conf文件
加入/opt/oracle/ora11/lib,该目录下有libocci.so文件
然后运行ldconfig -v使库链接生效
6.运行./occi即可显示结果

如有问题,或错误,请联系我,请高手不吝赐教,谢谢!

没有评论: