JDBC 를 통 해 Oacle 데이터 베 이 스 를 연결 하 는 10 가지 기술

자바 데이터베이스 연결(JDBC)API 는 자바 프로그래머 들 이 데이터 베 이 스 를 방문 할 수 있 는 일련의 인터페이스 로 각 개발 업 체 의 인 터 페 이 스 는 완전히 같 지 않다.다년간 Oracle 회사 의 JDBC 를 사용 한 후에 저 는 많은 기 교 를 쌓 았 습 니 다.이런 기 교 는 우리 로 하여 금 시스템 의 성능 을 더욱 잘 발휘 하고 더 많은 기능 을 실현 하 게 할 수 있 습 니 다.1.클 라 이언 트 소프트웨어 개발 에서 Thin 드라이버 를 사용 하여 자바 소프트웨어 를 개발 하 는 데 있어 Oracle 의 데이터 베 이 스 는 네 가지 유형의 드라이버 를 제공 했다.두 가 지 는 응용 소프트웨어,applets,servlets 등 클 라 이언 트 소프트웨어 에 사용 되 고 다른 두 가 지 는 데이터 베이스 에 사용 되 는 자바 저장 과정 등 서버 엔 드 소프트웨어 이다.클 라 이언 트 엔 드 소프트웨어 개발 에서 우 리 는 OCI 드라이버 나 Thin 드라이버 를 선택 할 수 있다.OCI 드라이버 는 자바 로 컬 인터페이스(JNI)를 이용 하여 Oracle 클 라 이언 트 소프트웨어 를 통 해 데이터베이스 와 통신 한다.Thin 드라이버 는 순수 자바 드라이버 로 데이터베이스 와 직접 통신 합 니 다.최고의 성능 을 얻 기 위해 Oracle 은 클 라 이언 트 소프트웨어 개발 에 OCI 드라이버 를 사용 하 는 것 이 옳 은 것 같다.그러나 저 는 Thin 드라이버 를 사용 하 는 것 을 권장 합 니 다.여러 번 의 테스트 를 통 해 일반적인 상황 에서 Thin 드라이버 의 성능 이 OCI 드라이버 를 초과 한 것 을 발 견 했 기 때 문 입 니 다.2.자동 제출 기능 을 닫 고 시스템 성능 을 향상 시 킵 니 다.데이터 베 이 스 를 처음 구축 할 때 부족 한 상황 에서 연결 은 자동 제출 모드 에서 이 루어 집 니 다.더 좋 은 성능 을 얻 기 위해 서 는 불 값 false 매개 변 수 를 가 진 Connection 류 의 setAutoCommit()방법 으로 자동 제출 기능 을 닫 을 수 있 습 니 다.다음 과 같 습 니 다.conn.setAutoCommit(false);주의해 야 할 것 은 자동 제출 기능 이 꺼 지면 Connection 류 의 commt()와 rollback()방법 을 호출 하여 인공 적 으로 업 무 를 관리 해 야 한 다 는 점 이다.3.동적 SQL 또는 시간 제한 명령 에서 Statement 대상 을 사용 하여 SQL 명령 을 수행 할 때 저 희 는 두 가지 선택 이 있 습 니 다.Prepared Statement 대상 을 사용 할 수도 있 고 Statement 대상 을 사용 할 수도 있 습 니 다.같은 SQL 명령 을 여러 번 사용 하 더 라 도 Prepared Statement 은 한 번 만 해석 하고 컴 파일 합 니 다.Statement 대상 을 사용 할 때 SQL 명령 을 실행 할 때마다 분석 하고 컴 파일 합 니 다.이 는 Prepared Statement 대상 을 사용 하 는 것 이 Statement 대상 을 사용 하 는 것 보다 속도 가 빠르다 고 생각 할 수 있 습 니 다.그러나 내 가 실시 한 테스트 에 따 르 면 클 라 이언 트 소프트웨어 에서 상황 은 그렇지 않다.따라서 시간 제한 이 있 는 SQL 작업 에 서 는 SQL 명령 을 일괄 적 으로 처리 하지 않 는 한 Statement 대상 을 사용 하 는 것 을 고려 해 야 합 니 다.또한,Statement 대상 을 사용 하면 동적 SQL 명령 을 작성 하 는 것 이 더욱 간단 합 니 다.문자열 을 연결 하여 효과 적 인 SQL 명령 을 만 들 수 있 기 때 문 입 니 다.따라서 Statement 대상 은 동적 SQL 명령 의 생 성과 실행 을 더욱 간단하게 할 수 있다 고 생각 합 니 다.4.helper 함 수 를 이용 하여 동적 SQL 명령 을 포맷 합 니 다.Statement 대상 이 실행 하 는 동적 SQL 명령 을 만 들 때 포맷 문 제 를 처리 해 야 합 니 다.예 를 들 어 O'Reilly 라 는 이름 을 표 에 삽입 하 는 SQL 명령 을 만 들 려 면 O'Reilly 의'''번 호 를 두 개 로 바 꿔 야 합 니 다.이 작업 을 완성 하 는 가장 좋 은 방법 은 교체 작업 을 마 친 helper 방법 을 만 든 다음 문자열 심 을 연결 하여 공식 적 으로 SQL 명령 을 표현 할 때 만 든 helper 방법 을 사용 하 는 것 입 니 다.이와 유사 한 것 은 helper 방법 으로 Date 형의 값 을 받 아들 이 고 Oracle 기반 to 를 출력 할 수 있 습 니 다.date()함수 의 문자열 표현 식 입 니 다.5.Prepared Statement 대상 을 이용 하여 데이터베이스 의 전체적인 효율 을 향상 시 킵 니 다.Prepared Statement 대상 을 사용 하여 SQL 명령 을 수행 할 때 명령 은 데이터 베 이 스 를 분석 하고 컴 파일 한 다음 명령 버퍼 에 놓 입 니 다.그리고 같은 Prepared Statement 대상 을 실행 할 때마다 다시 해석 되 지만 다시 컴 파일 되 지 않 습 니 다.버퍼 에서 미리 컴 파일 된 명령 을 발견 하고 다시 사용 할 수 있 습 니 다.많은 사용자 가 있 는 기업 급 애플 리 케 이 션 에 서 는 같은 SQL 명령 을 반복 적 으로 실행 하고,Prepared Statement 대상 이 가 져 온 컴 파일 횟수 의 감 소 를 사용 하면 데이터 뱅 크 의 전체적인 성능 을 향상 시 킬 수 있다.클 라 이언 트 가 Prepared Statement 작업 을 만 들 고 준비 하 며 수행 하 는 데 걸 리 는 시간 이 Statement 작업 보다 길 지 않 으 면 동적 SQL 명령 을 제외 한 모든 상황 에서 Prepared Statement 대상 을 사용 하 는 것 을 권장 합 니 다.6.반복 되 는 삽입 또는 업데이트 작업 을 일괄 처리 할 때 Prepared Statement 대상 을 사용 하여 삽입 과 업데이트 작업 을 일괄 처리 하면 필요 한 시간 을 현저히 줄 일 수 있 습 니 다.Oracle 이 제공 하 는 Statement 과 Callable Statement 은 일괄 처 리 를 진정 으로 지원 하지 않 고 Prepared Statement 대상 만 이 일괄 처 리 를 진정 으로 지원 합 니 다.저 희 는 addBatch()와 executeBatch()방법 으로 표준 JDBC 일괄 처 리 를 선택 하거나 Prepared Statement 대상 의 setExecuteBatch()방법 과 표준 executeUpdate()방법 으로 속도 가 빠 른 Oracle 만 의 방법 을 선택 할 수 있 습 니 다.Oracle 만 의 일괄 처리 체 제 를 사용 하려 면 다음 과 같은 방식 으로 setExecuteBatch():Prepared Statement pstmt3D null 을 호출 할 수 있 습 니 다.try {((OraclePreparedStatement)pstmt).setExecuteBatch(30);...pstmt.executeUpdate();} setExecuteBatch()를 호출 할 때 지정 한 값 은 상한 선 입 니 다.이 값 에 도달 하면 자동 으로 SQL 명령 이 실 행 됩 니 다.표준 execute Update()방법 은 일괄 처리 로 데이터베이스 에 전 달 됩 니 다.우 리 는 Prepared Statement 류 의 sendBatch()방법 을 호출 하여 수시로 일괄 처리 임 무 를 전송 할 수 있 습 니 다.7.Oracle locator 방법 으로 대상(LOB)Oracle 을 삽입,업데이트 하 는 Prepared Statement 류 는 BLOB 와 CLOB 등 대상 의 처 리 를 완전히 지원 하지 않 습 니 다.특히 Thin 드라이버 는 Prepared Statement 대상 을 이용 한 setObject()와 setBinary Stream()방법 으로 BLOB 의 값 을 설정 하 는 것 도 지원 하지 않 고 setCharacterStream()방법 으로 CLOB 의 값 을 설정 하 는 것 도 지원 하지 않 습 니 다.locator 자체 의 방법 만 이 데이터베이스 에서 LOB 형식의 값 을 가 져 올 수 있 습 니 다.Prepared Statement 대상 을 사용 하여 LOB 를 삽입 하거나 업데이트 할 수 있 지만 locator 를 사용 해 야 LOB 의 값 을 가 져 올 수 있 습 니 다.이 두 가지 문제 가 존재 하기 때문에 저 는 locator 의 방법 으로 LOB 의 값 을 삽입 하거나 업데이트 하거나 가 져 오 는 것 을 권장 합 니 다.8.SQL 92 문법 을 사용 하여 저장 과정 을 호출 할 때 저 희 는 SQL 92 또는 Oracle PL/SQL 을 사용 할 수 있 습 니 다.Oracle PL/SQL 을 사용 하 는 것 은 실제 적 인 이점 이 없고 앞으로 응용 프로그램 을 유지 하 는 개발 자 에 게 번 거 로 움 을 줄 수 있 기 때문에 저 는 저장 과정 을 호출 할 때 SQL 92 를 사용 하 는 것 을 권장 합 니 다.9.Object SQL 을 사용 하여 대상 모드 를 데이터베이스 에 옮 길 수 있 습 니 다.Oracle 의 데이터 베 이 스 를 대상 을 대상 으로 하 는 데이터 베이스 로 사용 할 수 있 으 면 응용 프로그램의 대상 모드 를 데이터 베이스 로 옮 기 는 것 을 고려 할 수 있 습 니 다.현재 방법 은 자바 비 안 을 위장 데이터베이스 대상 으로 만 들 고 그들의 속성 을 관계 표 에 투사 한 다음 이 비 안에 방법 을 추가 하 는 것 이다.비록 이렇게 하 는 것 은 자바 에서 아무런 문제 가 없 지만 조작 은 모두 데이터베이스 밖에서 진행 되 기 때문에 다른 데이터 베 이 스 를 방문 하 는 응용 프로그램 은 대상 모델 을 이용 할 수 없다.Oracle 의 대상 을 대상 으로 하 는 기술 을 이용 하면 새로운 데이터베이스 대상 유형 을 만들어 데이터베이스 에서 데이터 와 조작 을 모방 한 다음 에 JPublisher 등 도 구 를 사용 하여 자신의 자바 bean 류 를 생 성 할 수 있다.만약 에 이런 방식 을 사용한다 면 자바 응용 프로그램 은 응용 프로그램의 대상 모델 을 사용 할 수 있 을 뿐만 아니 라 응용 프로그램의 데이터 와 조작 을 공유 해 야 하 는 다른 응용 프로그램 도 응용 프로그램의 대상 모델 을 사용 할 수 있다.10.SQL 을 이용 하여 데이터베이스 내의 조작 을 완성 하고 자 합 니 다.제 가 여러분 께 소개 하고 자 하 는 가장 중요 한 경험 은 SQL 의 집합 을 위 한 방법 을 충분히 이용 하여 데이터베이스 처리 수 요 를 해결 하 는 것 입 니 다.자바 등 과정 화 된 프로 그래 밍 언어 를 사용 하 는 것 이 아 닙 니 다.프로그래머 가 한 표 에서 많은 줄 을 찾 으 려 면 결과 의 모든 줄 이 다른 표 의 데 이 터 를 찾 습 니 다.마지막 으로 프로그래머 는 첫 번 째 표 의 데 이 터 를 일괄 적 으로 업데이트 하기 위해 독립 된 UPDATE 명령 을 만 들 었 습 니 다.이와 유사 한 작업 은 set 자구 에서 여러 열 로 조회 하여 UPDATE 명령 에서 수행 할 수 있 습 니 다.단일 한 SQL 명령 에서 임 무 를 수행 할 수 있 을 때 데 이 터 를 네트워크 에서 흐 르 게 할 필요 가 있 습 니까?나 는 사용자 가 SQL 의 기능 을 최대한 발휘 하 는 방법 을 열심히 공부 할 것 을 건의 합 니 다.

좋은 웹페이지 즐겨찾기