한글이 계속 깨져서 결국엔 thin Driver대신에 OCI Driver를 썻습니다
(NLS_*와 모든 CARACTER_SET을 제대로 했는데도 말이죠^^, 참고로 oracle8.0.5, jdk1.2.2, jakarta-tomcat, linux입니다)
OCI로 하니까 한글은 정상적으로 나오는군요
ResultRet은 new String( zip_code.getBytes("KSC5601"), "8859_1");
로 했습니다.
(DB에 넣을때는 반대로 new String( SQL2.getBytes("8859_1"), "KSC5601"); 했구요..)
쨋던 한글은 제대로 읽고 쓸수 있는데...
문제는 라이브러리가 링크가 안되고 있습니다.
.bash_profile에 아래와 같이 넣었습니다.
export USERNAME BASH_ENV PATH
export PATH=/usr/local/jdk/bin:$PATH
#for jdk1.2.2
#export CLASSPATH=.:/usr/local/jdk/lib/tools.jar:/usr/local/jdk/lib/dt.jar
#for ibm jdk
export CLASSPATH=.:/usr/local/jdk/lib/classes.zip
export PATH=.:/usr/local/JSDK/bin:$PATH
# Oracle Environment Setup
export ORACLE_HOME=/home/oracle/app/oracle/product/8.0.5
export NLS_LANG=AMERICAN_AMERICA.KO16KSC5601
export NLS_TERRITORY=korea
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
export ORACLE_SID=WISBOT
export ULIMIT=2113674
export ORACLE_OWNER=oracle
export CLASSPATH=$CLASSPATH:$ORACLE_HOME/jdbc/lib/classes111.zip
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/jdbc/lib
그런데 위의 유저로 로긴해서 java test하면 정상적으로 결과가 나오는데
다른유저(.bash_profile에 설정이 없는 유저) 로 로긴해서 su 유저(.bash_profile에 설정이 있는 유저)한 다음에 java test 하면 아래와 같은 에러가 나옵니다.
Exception in thread "main" java.lang.UnsatisfiedLinkError: no oci805jdbc in java
.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1245)
at java.lang.Runtime.loadLibrary0(Runtime.java:466)
at java.lang.System.loadLibrary(System.java:774)
at oracle.jdbc.oci7.OCIDBAccess.logon(OCIDBAccess.java:142)
at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:103)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:148)
at java.sql.DriverManager.getConnection(DriverManager.java:453)
at java.sql.DriverManager.getConnection(DriverManager.java:133)
at test.main(test.java:123)
그래서,
Properties props = System.getProperties();
//USERNAME BASH_ENV PATH
props.put("PATH","/usr/local/jdk/bin:$PATH");
//#for jdk1.2.2
//#export CLASSPATH=.:/usr/local/jdk/lib/tools.jar:/usr/local/jdk/lib/dt.jar
//#for ibm jdk
props.put("CLASSPATH",".:/usr/local/jdk/lib/classes.zip");
props.put("PATH",".:/usr/local/JSDK/bin:$PATH");
//# Oracle Environment Setup
props.put("ORACLE_HOME","/home/oracle/app/oracle/product/8.0.5");
props.put("NLS_LANG","AMERICAN_AMERICA.KO16KSC5601");
props.put("NLS_TERRITORY","korea");
props.put("PATH","$PATH:$ORACLE_HOME/bin");
props.put("LD_LIBRARY_PATH","$LD_LIBRARY_PATH:$ORACLE_HOME/lib");
props.put("ORACLE_SID","WISBOT");
props.put("ULIMIT","2113674");
props.put("ORACLE_OWNER","oracle");
props.put("CLASSPATH","$CLASSPATH:$ORACLE_HOME/jdbc/lib/classes111.zip");
props.put("LD_LIBRARY_PATH","$LD_LIBRARY_PATH:$ORACLE_HOME/jdbc/lib");
로 Environment를 다 넣어 줬거든요..
그런데도 에러는 똑같이 나오는군요
그래서 System.out.println(props);를 찍어서 실행 될때와 안될때를 비교 해 봤더니
java.library.path=동일한설정들:/home/oracle/app/oracle/product/8.0.5/lib:/home/oracle/app/oracle/product/8.0.5/jdbc/lib
이 부분이 다르더군요....
제가 보기에는 /home/oracle/app/oracle/product/8.0.5/lib 이부분 인 것 같은데
이 디렉토리에는 여러가지 라이브러리들이 많이 있습니다.
이 파일들을 모두 path가 잡혀 있는 다른 디렉토리에 넣어 줄수두 없구...참..
java.library.path를 어디서 설정해 줘야 하는거죠?
.bash_profile에 보면
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
이 부분을 주석으로 막으면 동일한 에러가 떨어지는 것으로 봐선 이부분인 것 같긴 한데...말이죠..
|