戯言

つらつらと気づいたことを書いていきます。人狼とか。

スポンサーサイト


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Apache Commons DbUtilsの勧め


Apache Commons DbUtilsを使うと、DB接続時に使用する処理をある程度カプセル化でき、 接続・切断コーディング(特に例外処理など)を簡素化したり、 select結果の固有のBeanに格納したりすることもできます。

Apache Commons DbUtilsを使っていない場合と、使った場合でのコード例は次のようになります。
なお、両者とも接続部はコンストラクタを使用することにしています。

一目瞭然ではないでしょうか。dbutilsを使わない場合は、直接の動作とは無関係の例外処理のコードが多くなりますが、dbutilsを使うと、その辺りは全て記述しなくてよくなります。


使わない場合
private Connection conn;
public XXXDB() throws ClassNotFoundException, SQLException {
	try{
		InitialContext ic = new InitialContext();
		DataSource ds = (DataSource)ic.lookup("java:comp/env/jdbc/saldb");
		conn = ds.getConnection();
	}
	catch (NamingException ex){
		ex.printStackTrace();
	}
}

public void getXXXXXXXX(){
	Statement state = null;
	ResultSet rs = null;
	String query = "select ・・・・・・・・・・";
	try {
		state = conn.createStatement();
		rs = state.executeQuery(query);
		while (rs.next()){
			//
			// データ取得後の処理
			//
		}
	} catch (Exception ex) {
		ex.printStackTrace();
	} finally {
		try {
			if (rs != null) rs.close();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		try {
			if (state != null) state.close();
		} catch (SQLException ex) {
			ex.printStackTrace();
		}
	}
}

使う場合
private QueryRunner qr;
public XXXDB(){
	try{
		InitialContext ic = new InitialContext();
		DataSource ds = (DataSource)ic.lookup("java:comp/env/jdbc/xxxdb");
		qr = new QueryRunner(ds);
	}
	catch (NamingException e){
		e.printStackTrace();
	}
}

public void getXXXXXXXX(){
	String query = "SELECT ・・・・・・・・・・・・・・・";
	ResultSetHandler<?> rsh = new MapListHandler();
	try{
		List<Map<String, Object>> list = (List<Map<String, Object>>)qr.query(query, rsh);
		//
		// データ取得後の処理
		//
	}catch(SQLException e){
		e.printStackTrace();
	}
}

また、結果をMap(keyにカラム名、valueに値)として返したり、複数行であればこのMapのListを返すこともできます(上記の例のように)。さらには、Beanクラスを定義しておけば、Beanクラスで返すこともできるので、ResultSetから一つひとつ値を取り出してごちゃごちゃする処理から、おさらばできます。



スポンサーサイト

commons.io.FileUtilsの便利なメソッド


org.apache.commons.io.FileUtils


Javaでディレクトリ操作をする際に利用。
標準JDKだと、ファイルを含むディレクトリを削除できないため、再帰的に呼び出して1ファイルずつ削除する必要がありましたが、deleteDirectoryメソッドを使えば一発です。
import java.io.File;
import org.apache.commons.io.FileUtils;

File dir = new File("/tmp/removeDir");
FileUtils.deleteDirectory(dir);

ディレクトリコピーもcopyDirectoryで簡単。
import java.io.File;
import org.apache.commons.io.FileUtils;

File srcDir = new File("/tmp/srcDir");
File destDir = new File("/tmp/destDir");
FileUtils.copyDirectory(srcDir, destDir);

commons.lang.time.DateUtilsの便利なメソッド


org.apache.commons.lang.time.DateUtils#parseDate()


"2013/01/13 12:34:56"などの日付文字列をDate型に手っ取り早く変換できます。

import org.apache.commons.lang.time.DateUtils;

String[] parsePatterns = {"yyyy/MM/dd HH:mm:ss"};
String DateString = "2013/01/13 12:34:56"

Date date = DateUtils.parseDate(dateString, parsePatterns);
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。