redhat 5でocci接続oracleデータベース
1.対応するoracle-instantclientをダウンロードします.たとえば、次のようにします.
2.ユーザーがfanbin、ディレクトリが/home/fanbin/oracleなど、WinScpでredhat 5にアップロードし、それぞれ解凍する
解凍ディレクトリへ
ln -s libclntsh.so.11.1 libclntsh.so
ln -s libocci.so.11.1 libocci.so
3.環境変数を設定します.たとえば、/home/fanbinルートの下にあります.
vi .bash_profile
次の内容を追加します.
4.で$ORACLE_HOMEの下にtnsnamesを作成します.ora、次の内容を追加します.
注意:データベース構成に従って変更する必要があります.
5.テストコードをアップロードします.ファイル名はtestです.cpp、例えば:
6.コンパイルおよび実行
コンパイル:
g++ test.cpp -I$ORACLE_HOME/sdk/include -L$LD_LIBRARY_PATH -lociei -lclntsh -lnnz11 -locci -g -o test
実行:
./test
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