c言語ocilibを使用してoraleデータベースに接続
1760 ワード
c言語でoracleに接続する方法を見てみる必要がありますが、ネット上の資料が少なすぎるので、ブログを書いて記録します.
前にOCIを見て、C言語でOCIのapiを調整するのは理解しにくいですが、その後、ネット上にOCILIBがあるのを見て、OCIのパッケージで、操作がそんなに理解しにくいわけではないので、持ってきました.
OCILIBのダウンロードアドレスを添付しますhttp://orclib.sourceforge.net/download/
開発環境:vc++6.0,OCILIB 3.8.0
を過ぎて 距離:
1.tools->options->show directories for include files
OCILIBのINCLUDEをここに追加します.
2.tools->options->show directories for Library files
OCILIBのLIBディレクトリをここに追加します.
3.OCILIBのLIBディレクトリの下の*.dllをシステムルートディレクトリにコピーします(32ビットシステムはC:WindowsSystem 32||64ビットにコピーしてくださいC:WindowsSysWOW 64にコピーしてください).
4.vc++で新規プロジェクトを作成し、プロジェクト->settings linkに対応するlibを加える
ociliba.lib ocilibm.lib ocilibw.libそれぞれ対応データベース対応文字セットは(ANSI/UTF 8 version||UNICode/UFT 16/USC 2/wchar_t version||ANSI/UTF 8 for meta data)
この開発環境の構築が完了しました.
サンプルコード
前にOCIを見て、C言語でOCIのapiを調整するのは理解しにくいですが、その後、ネット上にOCILIBがあるのを見て、OCIのパッケージで、操作がそんなに理解しにくいわけではないので、持ってきました.
OCILIBのダウンロードアドレスを添付しますhttp://orclib.sourceforge.net/download/
開発環境:vc++6.0,OCILIB 3.8.0
を過ぎて 距離:
1.tools->options->show directories for include files
OCILIBのINCLUDEをここに追加します.
2.tools->options->show directories for Library files
OCILIBのLIBディレクトリをここに追加します.
3.OCILIBのLIBディレクトリの下の*.dllをシステムルートディレクトリにコピーします(32ビットシステムはC:WindowsSystem 32||64ビットにコピーしてくださいC:WindowsSysWOW 64にコピーしてください).
4.vc++で新規プロジェクトを作成し、プロジェクト->settings linkに対応するlibを加える
ociliba.lib ocilibm.lib ocilibw.libそれぞれ対応データベース対応文字セットは(ANSI/UTF 8 version||UNICode/UFT 16/USC 2/wchar_t version||ANSI/UTF 8 for meta data)
この開発環境の構築が完了しました.
サンプルコード
#include "stdafx.h"
#include
#include
#pragma comment(lib,"ocilibm.lib")
int main(int argc, char* argv[])
{
clock_t start,end;
OCI_Connection *cn;
start=clock();
if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT|OCI_ENV_CONTEXT))
return EXIT_FAILURE;
cn = OCI_ConnectionCreate("***** ****", "**** ****", "**** *****", OCI_SESSION_DEFAULT);
OCI_Statement * st;
st = OCI_StatementCreate(cn);
int nRet =0;
OCI_ExecuteStmt(st, "****sql **");
OCI_Resultset *rs;
int rownumber=0;
rs = OCI_GetResultset(st);
int rowcount=OCI_GetRowCount(rs);
for (int i=0;OCI_FetchNext(rs);i++)
{
number1[i]=OCI_GetInt(rs,1);
number2[i]=OCI_GetInt(rs,2);
number3[i]=OCI_GetInt(rs,3);
rownumber++;
}
OCI_Break(cn);
OCI_Cleanup();
}