자바, JDBC, Database 연결하여 사용하기 |
JDBC 를 이용하여 Database 를 연결하여 사용하는 방법을 알아본다.
Statement
Database Query 는 Statement 객체를 이용하는데, 이 객체는 DBConnection 을 통해서 얻을 수 있다.
Statement stmt = con.createStatement();
Statement 에는 다음의 2개의 대표함수가 있다.
int executeUpdate( String sql ); // db 조작에 관한 어떤 명령을 수행한다.
ResultSet executeQuery( String sql ) // db query 에 사용된다.
ResultSet
ResultSet 은 안드로이드의 Cursor 와 같은 녀석이라고 보면 된다.
ResultSet 은 스크롤 기능을 설정, 사용할 수 있는데
ResultSet.TYPE_FORWARD_ONLY
단방향 이동
ResultSet.TYPE_SCROLL_INSENSITIVE
양방향 이동은 가능하지만 데이터의 변경이 바로 적용되지 않는다.
ResultSet.TYPE_SCROLL_SENSITIVE
양방향 이동도 가능하고, 데이터 변경이 바로 적용된다.
다음 2가지는 ResultSet 을 통해 읽고 쓸 수 있는 권한 설정을 하는 option 이다.
ResultSet.CONCUR_READ_ONLY
데이터를 읽을 수만 있다.
ResultSet.CONCUR_UPDATABLE
데이터를 수정할 수 있다.
Transaction
기본적으로 database 에 어떤 작업을 수행하면 바로 적용된다.
하지만 transaction 이 필요한 경우가 있는데, setAutoCommit 값을 설정해줌으로서 조정 가능하다.
con.setAutoCommit( false );
위와 같이 하고, 어떤 db operation 들을 한 후
commit() 을 호출하면 한번에 db 수정 내용이 모두 적용되고,
rollback() 을 호출하면 지금까지 한 db operation 들이 취소된다.
PreparedStatement
PreparedStatement 는 Statement 인터페이스의 하위 인터페이스로, 동적인 SQL 에 주로 사용된다.
오라클 서버는 클라이언트에서 SQL 문장이 전송되어 오면, 해당 SQL 문장을 실행하고 실행한 SQL 문장정보를 서버에 저장해 놓는다.
그리고 동일한 SQL 문장이 전송되어 오면 서버에 저장되어 있는 정보를 이용해 문장을 실행하기 때문에
해당 문장을 처음 실행할 때보다 훨씬 빠르게 수행할 수 있다.
문제는 Statement 를 사용하여 쿼리를 하면 대소문자만 바뀌어도 다른 문장으로 인식하여
서버에 문장정보를 저장하는 작업 ( 파싱 ) 을 다시 수행하기 때문에 성능문제가 있을 수 있다.
그래서 나타난 것이 PreparedStatement.
이 녀석은 조건 값 부분만 다르게 명시할 수 있는 형태로, 조건값 부분만 바뀌어 오는 경우에 이 문장을 다른 문장으로 인식하지 않아 파싱작업을 생략하여 성능향상을 가져올 수 있다.
PreparedStatement 는 생성당시에 파싱을 수행하기 때문에 생성부문에서는 "약간" 일반 Statement 에 비해 성능이 떨어지지만, 조건값만 바꾸어 지속적으로 사용하는 경우 "엄청난" 성능 향상을 가져올 수 있다.
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] at GingerBread device GCM register returns SERVICE_NOT_AVAILABLE (4) | 2013.10.15 |
---|---|
[android] HttpClient vs. HttpURLConnection (0) | 2013.10.11 |
[android] how can I know if there is any application which can handle an intent. (0) | 2013.10.10 |
[android] how can I know whether an application is installed with packagename? (0) | 2013.10.08 |
eclipse 최적화 방법! (0) | 2013.10.08 |
댓글