redhat 5でocci接続oracleデータベース

4267 ワード

1.対応するoracle-instantclientをダウンロードします.たとえば、次のようにします.
 

  instantclient-basic-linux-11.2.0.3.0.zip  //        
  instantclient-sdk-linux-11.2.0.3.0.zip  //           
  

2.ユーザーがfanbin、ディレクトリが/home/fanbin/oracleなど、WinScpでredhat 5にアップロードし、それぞれ解凍する
 

  unzip instantclient-basic-linux-11.2.0.3.0.zip
  unzip instantclient-sdk-linux-11.2.0.3.0.zip
  ln -s instantclient_11_2 instantclient
  

解凍ディレクトリへ
  ln -s libclntsh.so.11.1 libclntsh.so
  ln -s libocci.so.11.1 libocci.so
3.環境変数を設定します.たとえば、/home/fanbinルートの下にあります.
  vi .bash_profile
次の内容を追加します.
 

  ORACLE_HOME=/home/fanbin/oracle/instantclient
  export LD_LIBRARY_PATH=$ORACLE_HOME
  export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
  export TNS_ADMIN=$ORACLE_HOME
  PATH=/sbin:$PATH:$HOME/bin
  export PATH
  

 
4.で$ORACLE_HOMEの下にtnsnamesを作成します.ora、次の内容を追加します.
 

  fbdb =
  (DESCRIPTION =
    (FAILOVER = ON)
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.101)(PORT = 1521))
    )
    (CONNECT_DATA =
       (SID=fbdb) 
    )
  )
  

注意:データベース構成に従って変更する必要があります.
5.テストコードをアップロードします.ファイル名はtestです.cpp、例えば:
 

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

//#pragma comment(lib,"oraocci11d.lib")

using namespace std;
using namespace oracle::occi;

int main()
{
	Environment *env=Environment::createEnvironment();//   occi  

	//      ,  ,   
	string name = "fanbin";
	string pwd = "***";
	string dbname = "fbdb";
	string dbname = "fbdb";
	
        //           tnsnames.ora 
        //string dbname ="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=192.168.0.101) (PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=fbdb)))";
	//string dbname ="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=192.168.0.101) (PORT=1521)) (CONNECT_DATA=(SID=fbdb)))";

	try
	{
		Connection *conn=env->createConnection(name,pwd,dbname);//   oracle   

		cout<<"         !"<<endl;
		
		string strQuery("select * from test");
		
		Statement *stmt=conn->createStatement(strQuery);//      

		ResultSet *rs;//              
		rs=stmt->executeQuery();//      
		
		//next              
		while (rs->next())
		{
			cout<<rs->getInt(1)<<":"<<rs->getString(2)<<":"<<rs->getString(3)<<endl;
		}

		//  
		stmt->setSQL("delete from test where id =:id");
		stmt->setInt(1,4);
		if(stmt->executeUpdate()==1)
		{
			cout<<"      "<<endl;
		}
		else
		{  
			cout<<"     "<<endl;
		}

		//  
		stmt->setSQL("insert into test values(:id,:key,:value2)");
		stmt->setInt(1,4);
		stmt->setString(2," ");
		stmt->setString(3," ");
		if(stmt->executeUpdate()!=1)
		{
			cout<<"    "<<endl;
		}

		//  
		stmt->setSQL("update test set key =:key where id=:id");
		stmt->setInt(2,4);
		stmt->setString(1," 1");
		if(stmt->executeUpdate()!=1)
		{
			cout<<"    "<<endl;
		}

		stmt->closeResultSet(rs);//     
		conn->terminateStatement(stmt);//    
		env->terminateConnection(conn);//    
	}
	catch(SQLException e)
	{
		cout<<"fbin:"<<e.what()<<endl;//    
	}

	Environment::terminateEnvironment(env);//    

	return 0;
}
  

 
6.コンパイルおよび実行
コンパイル:
  g++ test.cpp -I$ORACLE_HOME/sdk/include -L$LD_LIBRARY_PATH -lociei -lclntsh -lnnz11 -locci -g -o test
実行:
  ./test