java에서 groovy sql 사용하기

왜 : 신입사원이 JDBC 프로그래밍 문서를 보고 있는게 왠지 마음이 안좋았다.

미션 : SQL 처리를 좀더 쉽게, JNDI 사용도 가능하게…

ibatis나 hibernate 등 별도의 framework을 사용하면 좋긴한데,
모르는 라이브러리들은 왜이리 산처럼 쌓이는건지?, 그리고 framework 환경 구성하고, 학습하는데도 좀 시간이…

이런 부담을 포기하면, 자바 개발자들은 순수한(?) JDBC 프로그래밍의 세계로 들어가야 합니다.
물론… 기본으로 돌아가는 것의 중요함을 모르는 바는 아니지만, 게으름의 충동이…

그래서 groovy.sql.Sql 의 힘을 써보기로 했습니다.
(아예 groovy를 쓰면 더 좋겠으나 이건 ‘영어가 편하니 영어로 대화하자’ 라고 말하는 격.. )

어쨌거나, Sql 클래스에는 여러가지 메소드를 제공하지만 Closure 를 사용하는 것은 익숙한 java 개발 방식이 아니므로
여기서는 제외.

1. 필요 라이브러리
Sql library : grooyv-all-*.jar
vendor jdbc library : ojdbc*(oracle) 또는 mysql* 같은 벤더가 제공하는 jdbc library
vendor jndi library : clientcontainer.jar(jeus) 같은 벤더가 제공하는 client에서 jndi 접속용 library

2. 파일 소스
import groovy.sql.GroovyRowResult;
import groovy.sql.Sql;
import java.sql.SQLException;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class SqlToy {
public static void main(String[] args) throws Exception {
// jdbc 직접 연결
Sql sql = Sql.newInstance(“jdbc:oracle:thin:@localhost:1521:XE”, “system”, “**”, “oracle.jdbc.OracleDriver”);
// jndi 사용 연결
///// Sql sql = new Sql(lookup(“yourDS”));

// select example
String query = “select * from board where name = ?”;
for(GroovyRowResult row : sql.rows(query, new Object[]{“smpl”})){
System.out.println(row.get(“description”) );
}

// update example
sql.executeUpdate(“update board set comment = ? where name=? “, new Object[]{“comment”,”smpl”});

// select 1 row example
GroovyRowResult result = sql.firstRow(“select comment from board where name = ? and comment= ?”,
new Object[]{name,”comment”});
System.out.println(“selected comment = ” + result.get(“comment”));

sql.close();
}
// jeus jndi lookup
static DataSource lookup(String jndiname) throws Exception{
Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY, “jeus.jndi.JEUSContextFactory”);
env.put(Context.URL_PKG_PREFIXES, “jeus.jndi.jns.url”);
env.put(Context.PROVIDER_URL, “127.0.0.1:9736”);
Context ctx = new InitialContext(env);
return (DataSource)ctx.lookup(jndiname);
}
}

태그: ,

댓글 남기기

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.