일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- ZIP code does not match billing address
- 10g
- 아이폰
- 네스프레소 버츄오 넥스트
- 버츄오 할인
- 아이폰 리부팅
- oracle
- JSP
- 모델S
- 카메라 격자 보이기
- 3.1.3
- Java
- 삼성카드 우편번호
- 11g
- 아이폰 강제 리부팅
- 모델x
- 원격데스크탑
- 윈도우
- 쿠팡 네스프레소 할인
- 삼성카드 해외직구
- 원격데스크톱
- Util
- 아이폰 강제 재시동
- Listener
- win7
- 삼성카드 해외직구 우편번호
- 레드햇
- 해외직구 우편번호
- 다운그레이드
- 아이폰15 출시일
- Today
- Total
starland
[java] DbUtil 사용하기 본문
2007/06/15 09:52 |
I. 어디서 다운을 받나요?
http://jakarta.apache.org/site/downloads/downloads_commons-dbutils.cgi
http://jakarta.apache.org/commons/dbutils/apidocs/index.html
II. 설치는 어떻게 하나요?
다운 받은 commons-beanutils.jar는 자신의 /WEB-INF/lib/ 에 복사합니다
III. DbUtils란 무엇인가요?
DbUtils는 JDBC 작업을 좀더 쉽게 할수있도록 해주는 작은 클래스 집합입니다.
IV. 왜 DbUtils를 사용해야 하는가요?
① resource 누출에 대한 어떠한 가능성도 없습니다
JDBC코딩을 하는데 있어서 쉽지않고 양도 만만치 않으며 지루해 지기 쉽습니다
이러다 보면 자기도 모르게 Connection 누수를 발생시킬수 있는데 이러한 가능성을 배재해 줍니다
② 코드의 가독성이 높아집니다
데이터베이스 처리하는데 필요한 코드의 양을 절대적으로 줄여야 합니다.
남아있는 코드로 당신의 의도를 정확하게 나타내어야 합니다.
③ ResultSet으로 부터 JavaBean property로 세팅을 해줍니다!
더이상 setter메소드를 이용하여 ResultSet으로부터 컬럼값을 가져오는 코딩을 하지 않아도 됩니다
ResultSet 각각의 row는 bean instance의 에 완벽하게 전달해 줍니다
V. 어떻게 사용하나요?
① Connection, Statement, ResultSet 의 close를 간단하게!
이럴때는 org.apache.commons.dbutils.DbUtils 클래스를 이용하자!
이 클래스는 모두 static 메소드들로 구성되어있습니다
사용예)
DbUtils.close(conn);
DbUtils.close(stmt);
DbUtils.close(rs);
DbUtils.closeQuietly(conn);
DbUtils.closeQuietly(stmt);
DbUtils.closeQuietly(rs);
DbUtils.closeQuietly(conn, stmt, rs);
DbUtils.commitAndClose(conn);
DbUtils.commitAndCloseQuietly(conn);
DbUtils.loadDriver("com.mysql.jdbc.Driver");
DbUtils.rollback(conn);
closeQuietly 메소드처럼 뒤에 Quietly라고 붙어 있는 메소드는 익셉션 처리는 자체적으로 처리합니다,
즉 자신을 call한곳으로 throw 하지 않습니다
commitAndCloses는 connection을 commit 후 close 하며 rollback는 connection을 rollback 합니다
loadDriver 는 JDBC 드라이버를 로딩 합니다
② 파일로 저장된 SQL을 사용하자!
이럴 때는 org.apache.commons.dbutils.QueryLoader 클래스를 이용합니다
이 클래스는 SingleTone 패턴의 클래스입니다
즉 파일로 저장된 SQL을 읽어 HashMap으로 로드하는 클래스 입니다
사용예)
QueryLoader queryloader = QueryLoader.getInstance(); //싱글톤
HashMap hashmap = queryloader.load("sql");
queryloader.unload("sql");
queryloader는 싱클톤이므로 위와같이 객체를 얻어옵니다
load 함수는 Properties 클래스를 이용하여 sql.properties 파일을 읽어
HashMap으로 저장하여 리턴하여 줍니다
unload는 load시 따로 메모리에 저장해 놓았던 sql 정보를 해제합니다
③ Setter함수로 더이상 머리 아프지 말자!
이럴때는 org.apache.commons.dbutils.QueryRunner 클래스를 이용합니다
사용예)
...
BoardVO boardVO = null;
ArrayList arraylist = new ArrayList();
resultset = statement.executeQuery("SELECT * FROM board_t");
while (resultset.next()) {
boardVO = new BoardVO();
boardVO.setTitle("title");
boardVO.setContent("content");
boardVO.setWriter("writer");
arraylist.add(boardVO);
}
..
와 같은 코드는 다음과 같이 간략화 됩니다
ResultSetHandler rsh= new BeanListHandler(BoardVO.class);
QueryRunner queryRunner = new QueryRunner();
List list = (List)queryRunner.query(conn, "SELECT * FROM board_t", rsh);
정말 간단해 집니다 만약 테이블에 컬럼이 30~40개가 된다면..
select 한문장 할려면 코드수가 몇십줄 입니다. 더이상 노가다 하지 맙시다~
QueryRunner는 다음과 같은 함수를 지원합니다
사용예)
QueryRunner queryrunner = new QueryRunner();
QueryRunner queryrunner = new QueryRunner(DataSource ds); //datasource를 바로 이용할 수 있다
queryRunner.query(Connection conn, String sql, ResultSetHandler rsh)
queryRunner.query(Connection conn, String sql, Object param, ResultSetHandler rsh)
queryRunner.query(Connection conn, String sql, Object[] params, ResultSetHandler rsh)
여기서 말하는 Object param은 파라미터 전달시 사용됩니다
ArrayList params = new ArrayList();
params.add("100");
params.add("200");
ResultSetHandler rsh = new BeanListHandler(BoardVO.class);
QueryRunner queryRunner = new QueryRunner();
List list = (List)queryRunner.query(conn, "SELECT * FROM board_t WHERE boardNo > ? and boardNo < ?", params.toArray(), rsh);
select 뿐만 아니라 update, delete역시 가능합니다
사용예)
QueryRunner queryRunner = new QueryRunner();
queryRunner.update(Connection conn, String sql)
queryRunner.update(Connection conn, String sql, Object param)
queryRunner.update(Connection conn, String sql, Object params[])
ArrayList params = new ArrayList();
params.add(boardId);
queryRunner.update(connection, "UPDATE board_t SET read = read + 1 WHERE boardNo = ?", params.toArray());
와 같이 사용할 수 있습니다
VI. 샘플코드
public class DbUtilsExample() { public static void main(String[] args) { HashMap map = QueryLoader.getInstance().load("sql"); // (주의) load함수는 실행할때마다 파일을 읽습니다
Connection conn = null; try { DbUtils.loadDriver("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost/mysql", "root", "");
ArrayList params = new ArrayList();
ResultSetHandler rsh = new BeanListHandler(BoardVO.class); QueryRunner qr = new QueryRunner(); List list = (List)qr.query(conn, (String)map.get("select"), params.toArray(), rsh);
for (int i = 0; i < list.size(); i++) { BoardVO board = (BoardVO)list.get(i); System.out.println(board.getTitle()); System.out.println(board.getContent()); System.out.println(board.getWriter()); } } catch (Exception e) { System.out.println(e); } finally { DbUtils.closeQuietly(conn); } } }
|
DbUtils 몇가지 예제
DBUtils 기본은 다음 링크를 참조하세요
http://www.jakartaproject.com/article/jakarta/1108193481660
① 설정방법
DB유틸 설정 방법은 특별히 없습니다 그냥 다운받은 클래스 패스 잡으시면 됩니다
Application에서 사용시에는 환경변수나 실행시 클래스 패스를 잡으면 되고요,
웹에서 사용한다면 해당 어플리케이션의 /WEB-INF/lib/ 에 commons-beanutils.jar 를 복사하면 됩니다
기본적인 문서는 http://www.jakartaproject.com/article/jakarta/1108193481660 를 보세요
Download http://jakarta.apache.org/site/downloads/downloads_commons-dbutils.cgi
API http://jakarta.apache.org/commons/dbutils/apidocs/index.html
② SELECT 예제 (여러건)
③ SELECT 예제 (한건)
select 처리 건수가 1건일 경우에는 MapHandler를 사용하면 됩니다
핸들러에는 아래와 같이 여러 종류의 핸들러 들이 있으며,
ArrayHandler, ArrayListHandler, BeanHandler, BeanListHandler, ColumnListHandler, KeyedHandler, MapHandler, MapListHandler, ScalarHandler
그때그때 맞춰 사용하면 됩니다
④ UPDATE 예제
이 예제는 Unicorn 소스에 있는 예입니다
Unicorn 소스를 다운받아 /src/com/jakartaproject/admin/dao/AdminMySqlDAO.java 를 열어 보시면 Update, Insert 예제를 볼수 있습니다
=============================================
본문서는 자유롭게 배포/복사 할수 있지만
이문서의 저자에 대한 언급을 삭제하시면 안됩니다
저자 : GoodBug (unicorn@jakartaproject.com)
최초 : http://www.jakartaproject.com
=============================================