91 // 물리적으로닫지않고 cache에반환만한다. opstmt.close(); } opstmt.setint(3, lowerlimit); opstmt.setint(4, upperlimit); // Execute query rset = opstmt.executequery

Similar documents
Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

10.ppt

J2EE Concepts

Analyze Connection Failover Options.ppt

쉽게 풀어쓴 C 프로그래밊

歯JavaExceptionHandling.PDF

13주-14주proc.PDF

Spring Boot/JDBC JdbcTemplate/CRUD 예제

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

Microsoft PowerPoint - GUI _DB연동.ppt [호환 모드]

歯sql_tuning2

FileMaker 15 ODBC 및 JDBC 설명서

FileMaker ODBC 및 JDBC 가이드

Microsoft PowerPoint - 18-DataSource.ppt

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

Application 에서 Parameter 값을받아 JDBC Interface 로보내게되면적절한 JDBC Driver 를통해 SQL 을 Database 로보내주게되고결과를받아서사용자에게보여주게된다. 2-2 JDBC Interface JDBC 의핵심 Interface

Oracle Database 10g: Self-Managing Database DB TSC

개요오라클과티베로에서 JDBC 를통해접속한세션을구분할수있도록 JDBC 접속시 ConnectionProperties 를통해구분자를넣어줄수있다. 하나의 Node 에다수의 WAS 가있을경우 DB 에서 Session Kill 등의동작수행시원하는 Session 을선택할수있다.

웹연동 } 웹 (Web) 환경에서데이터베이스시스템을연동하는방법은다음과같다 } Server Client 구조의통신 (2-Tier) } Server Middleware Client 구조의통신 (3-Tier) 2

단계

FileMaker ODBC and JDBC Guide

JDBC 소개및설치 Database Laboratory

untitled

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL

PowerPoint 프레젠테이션

DBMS & SQL Server Installation Database Laboratory

- 다음은 Statement 객체를사용해서삽입 (insert) 작업의예 String sql = "insert into member(code, name, id, pwd, age) values ("; int id = 10; sql = sql + id +, ;// 항목사이에

.

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

FileMaker ODBC and JDBC Guide

MS-SQL SERVER 대비 기능

8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 )

NoSQL

개발문서 Oracle - Clob

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE

제11장 프로세스와 쓰레드

Microsoft PowerPoint - 10Àå.ppt

ALTIBASE HDB Patch Notes

PowerPoint Presentation

Chap7.PDF

Chapter 1

ESQL/C

untitled

Microsoft PowerPoint - 04-UDP Programming.ppt

슬라이드 1

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

Microsoft PowerPoint - aj-lecture5.ppt [호환 모드]

Intra_DW_Ch4.PDF

오라클 데이터베이스 10g 핵심 요약 노트

11 템플릿적용 - Java Program Performance Tuning (김명호기술이사)


단계

[ 목차 ] 5.1 데이터베이스프로그래밍개념 5.2 T-SQL T-SQL 문법 5.3 JAVA 프로그래밍 2

thesis-shk

untitled

(Humphery Kim) RAD Studio : h=p://tech.devgear.co.kr/ : h=p://blog.hjf.pe.kr/ Facebook : h=p://d.com/hjfactory :

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

Microsoft Word - [Unioneinc] 특정컬럼의 통계정보 갱신_ _ldh.doc

RDB개요.ppt

금오공대 컴퓨터공학전공 강의자료

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate

Bind Peeking 한계에따른 Adaptive Cursor Sharing 등장 엑셈컨설팅본부 /DB 컨설팅팀김철환 Bind Peeking 의한계 SQL 이최초실행되면 3 단계의과정을거치게되는데 Parsing 단계를거쳐 Execute 하고 Fetch 의과정을통해데이터

PowerPoint Presentation

페이지 2 / 9 목차 개요웹취약점분류점검결과해결방안 주의사항 : 빛스캔 ( 주 ) 의취약성검사가대상웹사이트의취약점을 100% 진단하지못할가능성이있으며, 원격에서탐지 하는점검의특성상오탐지 (False Positive) 할가능성이있으므로충분한검토과정

Module 4 Active Directory Domain Services 관리자동화

Data Sync Manager(DSM) Example Guide Data Sync Manager (DSM) Example Guide DSM Copyright 2003 Ari System, Inc. All Rights reserved. Data Sync Manager

JMF2_심빈구.PDF

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

DocsPin_Korean.pages

< FC8A8C6E4C0CCC1F620B0B3B9DF20BAB8BEC8B0A1C0CCB5E5C3D6C1BE28C0FAC0DBB1C7BBE8C1A6292E687770>

준비사항 } 실습조건 } MS-SQL Server 에연결가능한컴퓨터 } 실습용서버혹은별도의 MS-SQL 서버 } Northwind 데이터베이스 } MS-SQL 2000 에제공되는예제데이터베이스 } MS-SQL 2008 에는 Northwind 가기본으로제공되지않기때문에실

PowerPoint 프레젠테이션

ALTIBASE 사용자가이드 Templete

Spring Data JPA Many To Many 양방향 관계 예제

Result Cache 동작원리및활용방안 엑셈컨설팅본부 /DB 컨설팅팀김철환 개요 ORACLE DBMS 를사용하는시스템에서 QUERY 성능은무엇보다중요한요소중하나이며그 성능과직접적인관련이있는것이 I/O 이다. 많은건수를 ACCESS 해야만원하는결과값을얻을수있는 QUER

17장

Tibero

PowerPoint Presentation

Microsoft Word - SQL튜닝_실습교재_.doc

ALTIBASE 사용자가이드 Templete

Microsoft PowerPoint Python-WebDB

<4D F736F F F696E74202D20352E20BCBAB4C920C1DFBDC C F6EC0BB20C0A7C7D120BDC7BDC3B0A C3B3B8AEB9E6BEC

PowerPoint Presentation

Oracle hacking 작성자 : 임동현 작성일 2008 년 10 월 11 일 ~ 2008 년 10 월 19 일 신규작성 작성내용

Microsoft PowerPoint - CSharp-10-예외처리

Oracle9i Real Application Clusters

JAVA PROGRAMMING 실습 05. 객체의 활용

MySQL-Ch10

구축환경 OS : Windows 7 그외 OS 의경우교재 p26-40 참조 Windows 의다른버전은조금다르게나타날수있음 Browser : Google Chrome 다른브라우저를사용해도별차이없으나추후수업의모든과정은크롬사용 한

PowerPoint Template

자바 프로그래밍

IBM blue-and-white template

PowerPoint 프레젠테이션

ETL_project_best_practice1.ppt

Connection pool 엑셈컨설팅본부 /APM 팀박종현 Connection pool 이란? 사용자의요청에따라 Connection을생성하다보면많은수의연결이발생했을때서버에과부하가걸리게된다. 이러한상황을방지하기위해미리일정수의 Connection을만들어 pool에담아뒀다

PowerPoint 프레젠테이션

Microsoft PowerPoint 세션.ppt

1. 데이터베이스프로그래밍의개념 2. PL-SQL 3. 데이터베이스연동자바프로그래밍 4. 데이터베이스연동웹프로그래밍

Transcription:

90 2007 Spring Oracle Korea Magazine *Technology & Developer Technical Tips Oracle JDBC 를이용한성능향상방법쉽게적용할수있는예제들 저자 _ 김정식 Oracle ACE(oramaster@empal.com) JAVA 기반의웹프로젝트를진행하다보면대부분의개발자분들이사용하는 JDBC API들은제한적인것같다. 이번글을통하여 Oracle JDBC에서제공하는성능향상방법들에대해서알아보고, 예제를이용하여개발자분들도쉽게적용할수있게하려고한다. 대표적인성능향상방법으로는동일한구문이반복적으로실행될경우 cache를이용해성능을향상시킬수있는 Statement Caching 기법과매우향상된 Connection Cache 기능을제공하는 Implicit Connection Cache, 다중처리를지원하는 Oracle Update Batching, 운반단위의 fetch 처리를지원하는 Oracle Row Prefetching이있다. 이에대해자세히알아보도록하겠다. 예제파일실행방법 - 예제파일을실행하기위한환경 : Oracle 9i 버전이상, JDK 1.4 버전이상 - 예제소스다운 : http://www.oracleclub.com/odd/200703/sample.zip - JAVA_HOME 설정 : JDK가설치되어있는디렉토리를환경변수에추가한다. - JDBC_HOME 설정 : ojdbc14.jar 파일이있는디렉토리를환경변수에추가한다. - Oracle HR 사용자계정잠금해제 SQL> conn / as sysdba SQL> ALTER USER hr IDENTIFIED BY hr ACCOUNT UNLOCK; 1. Statement Caching Oracle JDBC는동일한구문이반복적으로실행되는경우미리파싱된정보를재활용함으로써오버헤드를방지하고, 성능을향상시킬수있는 Statement Caching 기능을제공한다. Statement Caching은 Implicit Statement Caching와 Explicit Statement Caching 두가지방법으로구현할수있다. 1 Implicit Statement Caching - Implicit Statement Caching은모든PreparedStatement와 Callable- Statement의 Cache 생성과반환을자동으로관리한다. - OracleConnection의 setimplicitcachingenabled(boolean cache) 메소드를 true로설정한다. - OracleConnection의 setstatementcachesize(int size) 를이용하여 Cache Size를설정한다. - OraclePreparedStatement의 close() 메소드를이용하여 cache에반환한다. - 사용예제 // Statement cache 사이즈를 5로설정 ((OracleConnection) conn).setstatementcachesize(5); // Enable Implicit caching ((OracleConnection) conn).setimplicitcachingenabled(true); // 10 회반복실행 for (int i=1 ; i<=10 ; i++) { //cache에서 statement를검색하여, 존재하면사용하고 // 존재하지않으면 cache에새로운 statement를생성한다. opstmt = (OraclePreparedStatement) conn.preparestatement(mysql); opstmt.setstring(1, empname); opstmt.setint(2, Integer.parseInt(deptId[selectedDept])); opstmt.setint(3, lowerlimit); opstmt.setint(4, upperlimit); // Execute query rset = opstmt.executequery(); // Close the ResultSet

91 // 물리적으로닫지않고 cache에반환만한다. opstmt.close(); } opstmt.setint(3, lowerlimit); opstmt.setint(4, upperlimit); // Execute query rset = opstmt.executequery(); 2 Explicit Statement Caching - Implicit Statement Caching은내부적으로 SQL 문장을 cache의 key로사용하지만, Explicit Statement Caching은사용자가직접 Key를지정하여 Cache의생성과반환을관리한다. - OracleConnection의 setexplicitcachingenabled(boolean cache) 메소드를 true로설정한다. - OracleConnection의 setstatementcachesize(int size) 를이용하여 Cache Size를설정한다. - OraclePreparedStatement의 getstatementwithkey(string key) 메소드를이용하여 cache 키를지정한다. - OraclePreparedStatement의 closewithkey(string key) 메소드를이용하여 cache에반환한다. // Close the ResultSet // statement를 close할때key를지정한다. opstmt.closewithkey( searchemployee ); } 3 성능테스트결과 < 그림 1> Statement Caching Sample - 사용예제 // Statement Cache 사이즈를 5로설정 ((OracleConnection) conn).setstatementcachesize(5); // Enable Explicit caching ((OracleConnection) conn).setexplicitcachingenabled(true); Statement Caching Schemes Performance Metrics on Statement Caching Without Cache With Imp Cache With Exp Cache //10 회반복실행 for (int i = 1; i <= 10; i++) { // Explicit cache key 사용. opstmt = (OraclePreparedStatement) Response Time in milli seconds for 10 iterations ((OracleConnection) conn).getstatementwithkey( searchemployee ); // Explicit cache에 statement가존재하지않으면 cache 생성 if (opstmt == null) { // 이단계는맨처음생성될때만호출된다. // 다음단계부터는 statement 문이 Cache로부터처리된다. opstmt = (OraclePreparedStatement) conn.preparestatement(mysql); } 위 < 그림1> 은 Statement Caching을사용하지않은경우와 Implicit Statement Caching을사용한경우, 그리고 Explicit Statement Caching을사용한경우성능을테스트한결과이다. Explicit Statement Caching을사용했을때가장좋은성능이나온다는것을확인할수있었다. 테스트예제는 sample.zip 파일을다운받아아래파일을참고하면된다. - 예제소스 : /src/oracle/otnsamples/jdbc/stmtcache/stmtcachesample.java - 성능테스트파일 : /bin/01.stmtcache.bat opstmt.setstring(1, empname); opstmt.setint(2, Integer.parseInt(deptId[selectedDept]));

92 2007 Spring Oracle Korea Magazine *Technology & Developer Technical Tips 2. Implicit Connection Caching 일반적으로 connection cache 는약간의물리적데이터베이스연결을풀에 서유지하여많은수의동시사용자가공유및재사용할수있게함으로써연결이요청될때마다새데이터베이스연결을설정하고연결이해제될때마다연결을닫아야하는번거로움을없애는방법이다. connection cache는기본적으로 logical connection을이용하여 physical connection을사용하며, connection cache manager 내부적으로향상된 cache 기법을통해서 physical connection들을관리한다. Oracle Database 10g 부터는 Connection Caching 매커니즘이새로운수준으로향상되었는데이를 Implicit Connection Cache라고한다. 1 Implicit Connection Cache 제공기능 Oracle 9i와 Oracle 10g 에서의지원기능비교 Oracle 9i 모든세션은동일데이터베이스내에속하며, 동일사용자에의해서만인증 stale connection 의갱신불가능 connection 에대한검색기능을지원하지않음 connection reclaim 지원하지않음 투명한 connection cache 접근을제공 - 표준 DataSource의 getconnection() API를이용하여 Connection Cache에접근한다. - 사용예제 ods.setuser( scott ); ods.setconnectioncachingenabled(true); ctx.bind( MyDS, ods); ds = (OracleDataSource) ctx.lookup( MyDS ); conn.getconnection(); // transparent cache creation and access conn.close(); // return connection to the cache ds.close(); // finally, close cache enabled DataSource Connection Cache Manager 제공 - cache의생성부터소멸까지관리 Oracle 10g 여러사용자 암호의인증을지원 connection recycling 및 stale connection 에대한갱신지원 cache 속성을통한 connection 검색지원 사용하지않는 connection 에대한 reclaim 가능, connection 재사용지원 - dynamic하게 cache 환경의재구성이가능 - multiple caches 관리를지원그외에사용자정의속성기반으로 Connection을할당하고요청하는 Connection Attributes 기능과, RAC 환경의 Oracle JDBC에서 Failover 기능을할수있는Fast Connection Failover와부하균형을해주는 Run-time Connection Load Balancing 기능을지원한다. 2 Implicit Connection Cache 사용예제 private static final String CACHE_NAME = CacheSample ; // Datasource 초기화 OracleDataSource ods = new OracleDataSource(); // Connection.properties 파일로부터 connection 정보를로딩 Properties prop = this.loadparams( Connection ); // Database 정보 set ods.setservername(prop.getproperty( HostName )); ods.setservicename( prop.getproperty( SID )); ods.setportnumber(new Integer( prop.getproperty( Port )).intvalue()); ods.setdrivertype( thin ); ods.setuser( prop.getproperty( UserName ) ); ods.setpassword( prop.getproperty( Password )); // Enable caching ods.setconnectioncachingenabled(true); // Set the cache name ods.setconnectioncachename(cache_name); //Connection Cache 초기화 OracleConnectionCacheManager connmgr = OracleConnectionCacheManager.getConnectionCacheManagerInstance(); // Cache Manager에서관리될 cache 값설정 Properties properties = new Properties(); // Cache 최소값설정. properties.setproperty( MinLimit, 1 ); // Cache 최대값설정.

93 properties.setproperty( MaxLimit, 15 ); // cache 명과, datasource, cache properties를지정하여새로운 cache 생성 connmgr.createcache(cache_name, ods, properties); Connection conn = ods.getconnection();. conn.close() Oracle Connection Cache Manager를사용하는완성된예제는아래파일을참고하면된다. - 예제소스 : /src/oracle/otnsamples/jdbc/conncache/conncachebean.java 3. Update Batching JDBC 2.0부터는 Statement, PreparedStatement 인터페이스의 addbatch(string sql) 메소드를이용하여여러건의데이터를처리할때처리속도를향상시킬수있었다. 한번에여러레코드를 INSERT, UPDATE, DELETE 할경우addBatch() 를이용하여자바에서도 Oracle 데이터베이스에서의 Array Processing 처리를할수있어성능향상을가져왔는데, Oracle JDBC에서는 Oracle-specific model의 addbatch() 기능을제공하여, 더욱더많은성능향상을가져올수있다. s.executebatch(); s.addbatch( insert into dept values ( 26, HR, Mongolia ) ); s.executebatch(); conn.commit(); ps.close();... 2 Oracle Update Batching - 대량의작업일수록성능이향상된다. - 적절한배치사이즈를지정해주어야한다. Oracle에서는 10 정도를추천하지만실제테스트결과 100 정도의사이즈를지정했을때좀더빠른성능을보였다. - Oracle 데이터베이스에서만사용할수있다. - Standard Update Batching보다성능이좋지만, PreparedStatement에서만지원된다. Connection conn = ds.getconnection(); //auto-commit을 false로설정 conn.setautocommit(false); PreparedStatement ps = conn.preparestatement( insert into dept values (?,?,?) ); 1 Standard Update Batching - JDBC2.0을지원하는모든데이터베이스에서사용가능하지만 Oracle-specific model에비해대량의작업일수록처리속도가많이차이난다. - OutOfMemory Error 방지를위하여 executebatch() 를중간에수동으로실행시켜주어야한다. Connection conn = ds.getconnection(); //auto-commit을 false로설정한다. conn.setautocommit(false); Statement s = conn.createstatement(); s.addbatch( insert into dept values ( 23, Sales, USA ) ); s.addbatch( insert into dept values ( 24, Blue Sky, Montana ) ); s.addbatch( insert into dept values ( 25, Applications, India ) ); // 수동으로 batch를실행해야한다. //batch size를설정한다. ((OraclePreparedStatement)ps).setExecuteBatch (3); //queue size #1 ps.setint(1, 23); ps.setstring(2, Sales ); ps.setstring(3, USA ); ps.executeupdate(); // 실행을위해 JDBC queues에넣는다. //queue size #2 ps.setint(1, 24); ps.setstring(2, Blue Sky ); ps.setstring(3, Montana ); ps.executeupdate(); // 실행을위해 JDBC queues에넣는다. //queue size #3 ps.setint(1, 25); ps.setstring(2, Applications ); ps.setstring(3, India );

94 2007 Spring Oracle Korea Magazine *Technology & Developer Technical Tips ps.executeupdate(); //queue의사이즈가 batch 사이즈 3과같다. //database에처리요청을보낸다. //queue size #1 ps.setint(1, 26); ps.setstring(2, HR ); ps.setstring(3, Mongolia ); ps.executeupdate(); // 실행을위해 JDBC queues에넣는다. 1 Standard Fetch Size - Statement, PreparedStatement, CallableStatement, ResultSet 객체의 setfetchsize(int rows) 메소드를이용하여 fetch size를설정하고얻을수있다. Connection conn = DriverManager.getConnection( jdbc:oracle:thin:@localhost:1521:ora 10G, scott, tiger ); ((OraclePreparedStatement)ps).sendBatch(); // database에처리요청을보낸다. conn.commit(); ps.close();... 3 Standard Update Batching과 Oracle Update Batching 성능테스트 Statement stmt = conn.createstatement(); stmt.setfetchsize(100); ResultSet rset = stmt.executequery( SELECT ename FROM emp ); while( rset.next () ) System.out.println( rset.getstring (1) ); 데이터건수 Standard Update Batching Oracle Update Batching 단위 900건 78 78 milliseconds 9000건 296 203 milliseconds 90000건 906 765 milliseconds 위표결과는필자가직접테스트한결과로데이터건수가많을수록 Oracle Update Batching의성능이좋은것을확인할수있다. 예제소스는아래파일을참고하면된다. - 예제소스 /src/oracle/otnsamples/jdbc/updbatch/updatebatching.java /src/oracle/otnsamples/jdbc/updbatch/basicbatching.java 4. Standard Fetch Size and Oracle Row Prefetching JDBC 2.0부터 Statement, PreparedStatement, CallableStatement, ResultSet 객체의 setfetchsize(int rows) 메소드를설정하여데이터베이스커서로부터한번에반환받을수있는데이터 Rows의수를지정할수있다. 기본값은 10으로되어있으며, fetch size를적절하게설정을하면 Query 작업수행시서버와의 round trip 을감소시켜성능향상을가져온다. JDBC의 Standard Fetch와 Oracle의 Row Prefetch는기본적으로비슷하지만, Oracle JDBC를사용하고있다면 OracleConnection의 setdefault- RowPrefetch(int value) 메소드를이용해서모든 Statement의기본fetch size를쉽게설정해대량의데이터를조회하는시스템에서효과적으로사용할수있다. rset.close() stmt.close(); 2 Oracle Row Prefetching - OracleStatement, OraclePreparedStatement, OracleCallableStatement 객체의 setrowprefetch(int rows) 메소드를이용하여 prefetch value를설정한다. - OracleConnection 객체의 setdefaultrowprefetch(int value) 메소드를이용하여 prefetch value를설정한다. Connection conn = DriverManager.getConnection( jdbc:oracle:thin:@localhost: ORA10G, scott, tiger ); //connection의 default prefetch value를설정한다. ((OracleConnection)conn).setDefaultRowPrefetch(7); Statement stmt = conn.createstatement(); ResultSet rset = stmt.executequery( SELECT ename FROM emp ); while( rset.next () ) System.out.println( rset.getstring (1) );

95 // 다음 statement에대해서 prefetch value를새로설정한다. ( (OracleStatement)stmt ).setrowprefetch (2); rset = stmt.executequery( SELECT ename FROM emp ); while( rset.next() ) System.out.println( rset.getstring (1) ); stmt.close(); 3 Oracle Row Prefetching 성능테스트아래 < 그림2> 와 < 그림3> 은 Oracle JDBC의 prefetch value를기본값과 100, 200으로설정하여 642건의데이터와 438,272건의데이터를테스트한결과이다. < 그림3> 에서보는봐와같이데이터가많은경우 prefetch value를지정하지않았을때와 200으로지정했을때엄청난속도차이가나는것을확인할수있다. - 예제소스 : /src/oracle/otnsamples/jdbc/stmtcache/stmtcachesample.java - 성능테스트파일 : /bin/01.stmtcache.bat 글을마치며, JAVA 기반의웹프로젝트에서개발자분들이애플리케이션의성능향상을높이기위한방법으로는두가지관점으로접근해볼수가있다. 첫번째는효율적인 SQL 문장을작성하는것이다. SQL 문장을효율적으로작성하기위해서는끊임없는학습과많은경험이중요하다. 두번째로는적재적소에맞게 JDBC API를사용하는것이다. 오라클데이터베이스를사용한다면, Oracle JDBC에서지원해주는효율적인기능들을사용해보기바란다. 아래 Reference에보면Oracle 데이터베이스에서사용할수있는유용한기능들이많이있으니확인해보기바란다. < 그림 2> 642 건의데이터를테스트한결과 < 그림 3> 438272 건의데이터를테스트한결과 Reference - Advanced JDBC Sample /advanced/advanced.html - Basic JDBC Sample /basic/basic.html - JDBC3.0 Sample /jdbc30/index.html - JDBC How-To Documents http://www.oracle.com/technology/sample_code/tech/java/codesnippet /jdbc/index.html - Oracle10g JDBC Samples /oracle10g/index.html - Oracle JDBC Center http://www.oracle.com/technology/global/kr/tech/java/sqlj_jdbc/index.html