반응형

원본 글 : 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)
)
)

다음은 프로젝트 파일이고....

OciTest.zip

oraociei.dll은 사이즈가 큰 관계로 제외되었음.. 빌드하기 위해서는 이 파일을 추가시켜줘야 함

반응형
반응형

원본 글 : http://blog.naver.com/poiq1?Redirect=Log&logNo=80141874162


이번 OCCI를 사용하다가... 큰 문제점에 봉착...ㅇㅂㅇ

쿼리문을 돌리고 나서 전체 row값을 가져온 후 데이터를 처리해야 하는데....

아무리 뒤져봐도 OCCI에서 그런 펑션을 찾기란..... 어려웟다...

꼼수로 쿼리문 두번 돌려서 한번은 총 row가져오고 두번째 쿼리때 데이터 처리했다가... 아무리 생각해봐도 이건 아니다 싶어 변경.

(ps. 혹시 OCCI에서 쓸수 있는법을 아시는분은 쪽지좀....)

아무튼 OCI에선 해당 기능을 가진 OCI_GetRowCount(rs); 함수가 있기 때문에 전면 OCCI -> OCI로 교체!!!

이거 또 처음 써봐서.... 고생고생....

OCI 라이브러리 다운로드

http://orclib.sourceforge.net/download/

여기 들어가보면 OCI 윈도우용과 리눅스 용을 받을 수 있다..!!!

뿐만 아니라 설치방법까지...우후후후...

간단하게 최신버전 3.9.2 버전을 받은 후

아무대나 압축 풀어보고(잘 몰라서 ORACLE_HOME경로에 풀엇음)

그 후 설명대로 폴더에 들어가서

./configure

make

문제는 여기서 발생....

make도중 오류가 발생해 버렷다.......

........

글을 유심히 보니 LD_LIBRARY_PATH 가 안맞아서 나는 오류

현재 나의 LD_LIBRARY_PATH=$ORACLE/lib 로 되여 있지만

make 오류난 곳을 보니 $ORACLE/lib32로 되어 있엇음.

따라서 export LD_LIBRARY_PATH 설정을 다시 해봐도 동일한 오류....

쿨럭;; 그래서 lib에 필요한 파일을 lib32에 넣어줌으로서 해결;;;

그 후 make install로 설치 완료

OCI관련 문구는 해당 사이트의 문서를 받아서 봐도 되고

http://orclib.sourceforge.net/doc/html/index.html

해당 사이트를 참조해도 된다.

[출처] OCI 설정|작성자 소류

반응형

+ Recent posts