2013년 11월 6일 수요일

[Oracle] Windows 64bit 오라클 Client 설치

출처: http://jhbench.tistory.com/entry/Oracle-Windows-64bit-%EC%98%A4%EB%9D%BC%ED%81%B4-Client-%EC%84%A4%EC%B9%98

클라이언트를 설치하는 입장에서 서버의 버전은 중요하지 않다.
만약 서버가 10g라해도 과감히 11g 클라이언트를 설치해도 무방하다.
오히려 11g 클라이언트가 더 잘된다.
닷넷에서 오라클 연결 시에도 다른S거 필요없이 오라클 클라이언트만 깔아주면 된다.
일단 오라클 사이트에가서 클라이언트 프로그램을 다운로드 한다.
http://www.oracle.com/technology/software/products/database/oracle11g/111060_win64soft.html



### 오라클 삭제 ###

1. 시작 메뉴에서 오라클 삭제
시작 -> Oracle 메뉴 -> Universal installer -> 제품설치 해제 -> 모두 체크 제거
2 . 레지스트리 삭제

시작 -> 실행 -> regedit001\Services\Oracle 관련서비스(폴더) 삭제를 통해서 다시 서비스를 가동할 수 있다.

1) - HKEY_Local_Machine\software\Oracle폴더 삭제.
2) - HKEY_Local_Machine\system\ControlSet
3) - HKEY_Local_Machine\system\ControlSet002\Services\Oracle 관련서비스 삭제
4) - HKEY_Local_Machine\system\CurrentControlSet\Services\Oracle 관련서비스 삭제
=> Oracle 관련 값은 모두 제거해야 한다.
3. Reboot
4. 환경 변수에서 오라클 관련 모두 삭제(내컴에서 오른 버튼 속성에 고급)
5. 탐색기에서
- 설치 파티션 : \Oracle폴더 (기본 C:\oracle)
- 부트 파티션 : \Program files\Oracle폴더
부트 파티션 삭제 시 oci.dll이 삭제 되지 않을 수 있다. 그때는 도스 커맨드에서
net stop msdtc 를 수행하여 msdtc 서비스를 멈춘다음, delete를 시도하여 보면, 삭제가 된다.
이후, net start msdtc


### 오라클 설치 ###

* 받은 파일의 압축을 풀고 install에서 setup을 실행한다.
* 관리자가 필요한 사람은 관리자를 설치하고 그냥 런타임을 선택한다.
* 베이스 디렉토리는 C:\oracle 이라고 한다
* 프로그램 설이 디렉토리는 C:\oracle\product\버전...(기본으로 나오는 패스를 사용)
* 설치가 끝나면 리부팅 한번 해준다.(별 필요없지만 왠지 해주면 좋다)
* 기존의 trsnames.ora 파일 있더라도 갖다 놓지 않는다. 버전이 올라가면서 약간..다르다.
* 시작메뉴에서 오라클로 가서 Net Manager 를 수행한 후 서비스를 하나 등록한다.
* 등록하고 NetManager를 종료하면 저장할까 물어볼때 저장한다.
* 그러면 오라클 폴더의 Network/Admin 폴더 아래에 trsnames.ora 파일이 생성된다.
* 파일을 열어보면 나름대로 규칙을 가지게 되어있는데 그 형태를 유지해서 기존 서비스들도 만들어 넣는다.
* 다시 NetManager를 띄워서 하나의 서비스를 선택하고 왼쪽 툴바에 테스트 버튼을 눌러서 접속 테스트를 해본다. (접속 테스트 할때 아뒤랑 패스워드를 제대로 넣어줘야 테스트가 가능하다.)
닷넷에서 접속이 되는 지 확인 하기.
* windows 폴더 아래에 assembly 폴더를 탐색기로 열어보면 Oracle.DataAccess 파일이 보인다. 버전을 확인해 보면 Version=2.111.6.0 대충 이렇다.
* web.config 파일을 열어서 <add assembly="Oracle.DataAccess, Version=2.111.6.0, Culture=neutral, PublicKeyToken=89B483F429C47342" /> 를 추가 해 준다.

2013년 10월 24일 목요일

mybatis에서 NumberformatException이 나는 경우

출처: http://sinius.net/?p=308


java.lang.NumberFormatException: For input string: “y” 에러 해결방법

### Error querying database. Cause: java.lang.NumberFormatException: For input string: “y”
### Cause: java.lang.NumberFormatException: For input string: “y”
myBatis 사용시 위와 같은 에러가 발생하는 경우가 있다.
원인을 살펴보면 다음과 같은 형식의 문자열 비교 구문에서 에러가 발생하는 것을 확인할 수 있다.
123
<if test=”stringValue == ‘Y’”>
AND A.COLUMN1 = #{condition}
</if>
view rawgistfile1.xml hosted with ❤ by GitHub

분명 문자열 비교 구문인데 NumberFormatException이 발생하는 상황이다.
결론적으로 위 현상은 myBatis 문제는 아니고 OGNL(Object Graph Navigation Language) 의 문제이다.
OGNL 인터프리터에서는 위 구문의 ‘Y’를 char 형으로 인식하고, ‘YY’나 “Y”는 String으로 인식한다. (따옴표를 잘보자)
그래서 <if test=”stringValue == ‘Y’”> 이와 같은 구문을 비교할 때  NumberFormat으로 비교를 시도하여 Exception이 발생한다.
이유는 java의 char형은 실제로 문자의 코드값을 저장하기 때문이다. 그래서 아래와 같은 형변환이 가능하다.
12
char y = 'Y';
int code = (int)y; // code에는 Y의 코드값인 89가 저장된다.
view rawgistfile1.java hosted with ❤ by GitHub

그래서 위와 같은 상황을 피하기 위해서는 다음과 같은 해결책이 존재한다.
1. <if test=’stringValue == “Y”‘> – 쌍따옴표와 홑따옴표의 위치를 변경
2. <if test=”stringValue == &quot;Y&quot;”> – 쌍따옴표를 HTML 코드로 변경
3. <if test=”stringValue == ‘Y’.toString()”> – toString() 함수를 사용해 String 형으로 변환
개인적으로는 1번 방법이 제일 깔끔하고 코드 읽기도 쉬운거 같아서 if 구문이 들어간 곳에 전부 적용해서 쓰고 있다.
123
<if test='stringValue == "Y"'>
AND A.COLUMN1 = #{condition}
</if>
view rawgistfile1.xml hosted with ❤ by GitHub