셋업 실행.
1. PRO C 설치
사용가능한 제품에서 클라이언트 선택하고 다음.
설치유형에서는 관리자를 선택하고 다음.
커맨드 창을 열고..

C:\Documents and Settings\Administrator>proc

Pro*C/C++: Release 9.2.0.1.0 - Production on 화 Jan 22 19:08:20 2008

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

시스템 기본 옵션 값이 가지고 온 곳: C:\oracle\ora92\precomp\admin\pcscfg.cfg

옵션 이름      현재 값        기술
-------------------------------------------------------------------------------
auto_connect   아니오         ops$ 계정으로 자동 연결할 수 있도록 합니다
char_map       charz          문자 배열과 문자열을 대응합니다
close_on_commit아니오         COMMIT에 모든 커서를 닫습니다
cmax           100            접속 풀에 대한 CMAX 값
cmin           2              접속 풀에 대한 CMIN 값
cincr          1              접속 풀에 대한 CINCR 값
ctimeout       0              접속 풀에 대한 CTIMEOUT 값
cnowait        0              접속 풀에 대한 CNOWAIT 값
code           ansi_c         생성될 코드 유형
comp_charset   multi_byte     C 컴파일러가 지원하는 문자 집합 유형
config         default        다른 파일로 시스템 구성 파일 무효화
cpool          아니오         접속 풀링 지원
cpp_suffix     *none*         기본 C++ 파일 이름 접미어 무효화
dbms           native         v6/v7/v8 호환성 모드
def_sqlcode    아니오         '#define SQLCODE sqlca.sqlcode' 매크로 생성
define         WIN32_LEAN_AND_선행 프로세서 기호 정의
duration       transaction    캐시에 있는 객체에 대한 핀 기간 설정
dynamic        oracle         Oracle 또는 ANSI 동적 SQL 의미 지정
errors         예             오류 메시지가 터미널에 전송될지 여부
errtype        *none*         intype 파일 오류에 대한 목록 파일 이름
fips           none           ANSI 비호환 사용의 FIPS 플래그 처리
header         *none*         이전에 컴파일된 헤더에 대한 파일 확장자 지정
hold_cursor    아니오         커서 캐시에서 커서 유지 제어
iname          *none*         입력 파일 이름
include        *none*         포함된 파일에 대한 디렉토리 경로
intype         *none*         유형 정보에 대한 입력 파일 이름
lines          아니오         생성된 코드에 #line 지시어 추가
lname          *none*         기본 목록 파일 이름 무효화
ltype          none           목록 파일에 생성된 데이터 양
maxliteral     1024           생성된 문자열 리터럴의 최대 길이
maxopencursors 10             캐시에 저장된 열린 커서의 최대 수
mode           oracle         Oracle 또는 ANSI 규칙에 대한 코드 일치
nls_char       *none*         국가별 언어 문자 변수 지정
nls_local      아니오         NLS 문자 의미가 수행되는 방법 제어
objects        예             객체 유형 지원
oname          *none*         출력 파일 이름
oraca          아니오         ORACA 사용 제어
pagelen        80             목록 파일의 페이지 길이
parse          none           비SQL 코드의 구문 분석 제어
prefetch       1              커서 OPEN 시 미리 인출된 행 수
release_cursor 아니오         커서 캐시에서 커서 해제 제어
select_error   예             선택 오류의 플래그 제어
sqlcheck       syntax         SQL 확인 시 컴파일 시간의 양
sys_include    *none*         시스템 헤더 파일이 있는 디렉토리
threads        아니오         다중 스레드 응용 프로그램을 나타냄
type_code      oracle         동적 SQL에 대한 Oracle 또는 ANSI 유형 사용
unsafe_null    아니오         지시자 변수 없이 널 인출 허용
userid         *none*         사용자 이름/암호 [@dbname] 접속 문자열
utf16_charset  nchar_charset  UTF16 변수에 의해 사용된 문자 집합 형식
varchar        아니오         암시적 varchar 구조 사용 허용
version        recent         반환될 객체의 버전
win32_threads  아니오         Windows 기본 로컬 스레드 지원
PCC-F-02135, CMD-LINE:  사용자가 도움을 요청했습니다

2. C 컴파일러 설치 -> 비쥬얼 스튜디오 C++ 설치.

3. 비쥬얼 c++ 실행 경로를 시스템 환경 변수의 PATH에 등록.

          경로 -->  C:\Program Files\Microsoft Visual Studio\VC98\Bin

4. 커맨드 창을 새로 열고 다음과 같이 확인한다.

C:\Documents and Settings\Administrator>vcvars32
Setting environment for using Microsoft Visual C++ tools.

위와 같은 메세지가 뜨면 성공적으로 된것이다.

5. D:\ProC 폴더를 생성

6. pcmake.bat 파일을 d:\ProC 폴더로 이동 ( pcmake.bat 프리컴파일, 링킹을 한번에 처리해 주는 파일)

7. d:\ProC폴더를 시스템 환경변수의 path에 등록.

8. 새로운 명령창을 띄우고 다음의 명령들을 실행

   >proc
   >vcvars32
   >pcmake

C:\Documents and Settings\Administrator>vcvars32
Setting environment for using Microsoft Visual C++ tools.
C:\Documents and Settings\Administrator>pcmake
.
usage pcmake filename.pc [ i.e. pcmake sample1 ]
.
C:\Documents and Settings\Administrator>

 이상의 명령이 오류없이 모두 실행되면 환경 설정 완료!

AND


1. 자바 --> C 또는 C++로 문자열 변환                                       
package 패키지;
class 클래스 {
   public static native void 메쏘드(String 문자열아규먼트);
}
를 javah로 C 헤더파일로 뽑아내게 되면 다음과 같은 C 프로토타입 정의를 얻게된다.
JNIEXPORT void JNICALL Java_패키지_클래스_메쏘드(JNIEnv *env, jclass obj, jstring 문자열아규먼트);
그럼.. C (또는 C++)에서는 다음과 같이 문자열을 읽을 수 있다.
char sbuf[512];                        // 문자열을 담을 버퍼 준비
memset(sbuf, 0, sizeof(sbuf)/sizeof(sbuf[0]));  // 버퍼를 null로 설정
const char *pch = (const char *)env->GetStringUTFChars(문자열아규먼트, 0);  // 문자열아규먼트
sprintf (sbuf,"%s", pch);          // 문자열을 버퍼에 카피
env->ReleaseStringUTFChars(문자열아규먼트, pch);    // 종료..
이제 printf ("%s", sbuf) 를 하게 되면 자바에서 넘겨준 문자열을 C에서 출력할 수 있다..


2. 반대의 경우 C --> Java로 문자열을 넘겨줄때에는                    
jstring retval;
retval = env->NewStringUTF(sbout);
return retval;
하면 된다.
하지만, 문제는 윈도우즈에서는 한글이 깨져서 넘겨지게 된다.
(최소한 제 경우 그럼)
그래서, 윈도우즈에서는 조금 다른 방식으로 처리해야 한다.
즉, 먼저 윈도우즈 API로 직접 유니코드 문자열로 바꾼다음, 직접 이 유니코드 문자열을
넘겨야 한다.
방법은 다음과 같다.
   jchar sbuf2[512];
   int size = MultiByteToWideChar(CP_ACP, 0, sbuf, strlen(sbuf) + 1, sbuf2, 512);
   retval = env->NewString (sbuf2, size);
이렇게 하면, 아무 문제 없이 한글지원이 된다.
MultiByteToWideChar()에 대한 자세한 문서는 msdn에서 찾아보자..

AND


[ Oracle Instant Client 설치 -예제는 solaris64]

1. 다운로드 후 설치 파일 임의 디렉토리에 FTP 이용하여 올리기
http://www.oracle.com/technology/global/kr/tech/oci/instantclient/instantclient.html
(해당 클라이언트를 선택하여, 다운 받으시고 ftp 이용해 서버로 옮기시길...)

Instant Client Package - Basic
Instant Client Package - JDBC Supplement
Instant Client Package - SQL*Plus
Instant Client Package - SDK


2. 압축 해제 및 실행폴더로 복사
# unzip instantclient-basic-solaris64-10.2.0.3-20070101.zip
# unzip instantclient-jdbc-solaris64-10.2.0.3-20070101.zip
# unzip instantclient-sdk-solaris64-10.2.0.3-20070101.zip
# unzip instantclient-sqlplus-solaris64-10.2.0.3-20070101.zip
# cd instantclient_10_2
# mkdir /usr/lib/oracle
# mv * /usr/lib/oracle/


3. profile 및 tnsnames 파일 수정

# vi /etc/profile
-----------------------------------------------------------------
# for Oracle Instant Client
if [ -d /usr/lib/oracle ]
then
  LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/oracle;export LD_LIBRARY_PATH
  PATH=$PATH:/usr/lib/oracle;export PATH;
  NLS_LANG=Korean_Korea.KO16KSC5601;export NLS_LANG;
  TNS_ADMIN=/usr/lib/oracle; export TNS_ADMIN;
  SQLPATH=/usr/lib/oracle; export SQLPATH;
fi
-----------------------------------------------------------------

# vi /usr/lib/oracle/tnsnames.ora
-----------------------------------------------------------------
ORA=
  (DEscRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST =211.XXX.XXX.XXX)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ora)
    )
  )
-----------------------------------------------------------------
혹시 재접속 에러가 발생하면 ^M 이 문자열에 있을 것입니다. 아마 복사해서 사용할 경우
발생할수도 있습니다. vi로 직접 입력하시던지 editplus를 이용해서...


4. 로그아웃 후 재접속. 테스트
# sqlplus user/passwd@ORA
SQL*Plus: Release 10.2.0.2.0 - Production on 화 10월 21 16:47:39 2007
Copyright (c) 1982, 2005, Oracle.  All Rights Reserved.

다음에 접속됨:
Oracle10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 10.2.0.1.0 - Production
SQL>

AND