OCI를 이용한 오라클 접속
원본 글 : http://blog.daum.net/hdongle/79096
저번 회사 재직중에는 오라클 접속프로그램 제작시에는 오라클 클라이언트 깔고 어쩌고 하는게 귀찮아서
jdbc thin driver로 접속을 했었죵
하지만 며칠전 MFC로 mssql 접속하는 프로그램을 만들 일이 있었는데 DB가 오라클이란다...젠장...
하여 어케 접속할까 하다가 OCI방식으로 접속하는 방법을 검색해서 한번 적용해 봤음...
1. 다운로드
1-1) 오라클 사이트 접속(http://www.oracle.com/index.html)
1-2) 다운로드 -> Instant Client
1-3) 개발하고자 하는 환경을 받는다
나는 Instant Client for Microsoft Windows (32-bit)
1-4) Accept License Agreement 라디오버튼 체크해주시고
1-5) 나는 오라클 10g 클라이언트 프로그램을 해야 하므로
1-5-1) instantclient-basic-win32-10.2.0.5.zip <= dll파일등
1-5-2) instantclient-sdk-win32-10.2.0.5.zip <= 라이브러리와 헤더파일
물론 다운로드 받을려면 계정은 있어야 한다. 물론 공짜다..ㅋㅋㅋ
2. 프로젝트 생성 및 라이브러리 설정
2-1) 프로젝트를 하나 만든다. 프로젝트 이름은 E:\Work\Test\폴더 아래에 "OciTest" 콘솔로 만들어보자
2-2) 프로젝트 내에 oci라는 폴더를 하나 만들자(여기서는 E:\Work\Test\OciTest\OciTest\oci)
2-2) (1-5-2)에서 다운로드 받았던 파일들 중에 압축을 해제하면 instantclient_10_2\sdk 폴더 아래에 include, lib 폴더를
방금 만들었던 oci 폴더에 복사하자
2-4) 1-5-1에서 다운로드 받았던 파일들중에 dll파일들을 E:\Work\Test\OciTest\OciTest폴더에 복사하자
2-5) 프로젝트 속성페이지에서
2-5-1) 구성속성 -> C/C++ -> General의 Additional Directory : "./oci/include"
2-5-2) 구성속성 -> Linker -> General의 Additional Library Directory : "./oci/lib/msvc"
2-5-3) 구성속성 -> Linger -> Input의 Additional Dependencies : "oci.lib oraocci10.lib"
3. 아래와 같이 코드를 작성한다. 웹에서 어디선가 갖다 배낀것임당..-_- 태클사절
#include "stdafx.h"
#include <occi.h>
using namespace oracle::occi;
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
Environment *env = 0;
Connection *conn = 0;
Statement *stmt = 0;
ResultSet *rs = 0;
try
{
env = Environment::createEnvironment(Environment::DEFAULT);
conn = env->createConnection("system", "xxxxxx", "orcl");
stmt = conn->createStatement("select * from tab");
rs = stmt->executeQuery();
while ( rs->next() )
{
std::string name2 = rs->getString(2);
printf("%s\n", name2.c_str());
}
stmt->closeResultSet(rs);
conn->terminateStatement(stmt);
env->terminateConnection(conn);
Environment::terminateEnvironment(env);
}
catch (oracle::occi::SQLException ex)
{
printf("exception code (%d), %s\n", ex.getErrorCode(), ex.what());
if (rs)
stmt->closeResultSet(rs);
if (stmt)
conn->terminateStatement(stmt);
if (conn)
env->terminateConnection(conn);
if (env)
Environment::terminateEnvironment(env);
}
return 0;
}
4. createConnection 문에서 id, password, 그리고 sid가 들어가는데
sid는 배포시에 오라클 클라이언트 없이 동작하려면 tnsnames.ora파일을 필요로 한다.
현재 폴더에 생성해서 아래의 내용을 입력한다(host에 127.0.0.1대신에 실제 ip주소를 넣어준다)
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
다음은 프로젝트 파일이고....
oraociei.dll은 사이즈가 큰 관계로 제외되었음.. 빌드하기 위해서는 이 파일을 추가시켜줘야 함