Home > プログラミング > JDBCでデータを挿入した列の情報を取得する方法

JDBCでデータを挿入した列の情報を取得する方法

Javaでデータベースを使ったアプリケーションを開発する時にはJDBCをよく使います。

今日、あるテーブルにデータを挿入するコードを書いていたのですが、データの挿入直後に挿入した列の情報(例えば、オートインクリメントのID)を取得する場合どう書けばよいのかわかりませんでした。きっと初歩的な事なんだろうなぁ・・・。(もしかしたら標準APIでこの機能を実現するものがあるのかも・・)

少し調べた結果、なんとか解決できたのでメモを残しておきます。以下が、データ挿入と挿入した列の情報取得を行うコードです。idとnameカラムを持つhogeテーブルにデータを挿入するinsertHogeメソッドが定義されたクラスです。insertHogeメソッドは、hogeテーブルに新たなnameを登録し、オートインクリメントで割り当てられたidを戻り値として返します。

package dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.sql.DataSource;


/**
* DBのhogeテーブルを扱うクラス
*/
public class HogeDAO {
	private static final String SELECT = "SELECT * FROM hoge";
	
	private DataSource ds;
	
	public CTDAO(DataSource ds) {
		this.ds = ds;
	}
	
	/**
	* name(名前)をhogeテーブルに挿入するメソッド
	* 戻り値:挿入したデータに割り当てられたid
	*/
	public int insertHoge(String name) throws SQLException {
		int id = -1;
		
		Connection con = ds.getConnection();
		Statement s = con.createStatement(
				ResultSet.TYPE_SCROLL_INSENSITIVE,
				ResultSet.CONCUR_UPDATABLE);
			
		ResultSet rs = null;
		try {
			rs = s.executeQuery(SELECT);
			
			rs.moveToInsertRow();
			
			rs.updateString("name", name);
			rs.insertRow();
			
			// idの取得
			rs.last();
			id = rs.getInt("id");
		} catch (SQLException ex){
			throw ex;
		} finally {
			rs.close();
			s.close();
			con.close();
		}
		
		return id;
	}
}

一応動きましたがもっと上手い書き方ないでしょうか・・?もしかしてこれを実現するメソッドが既に定義されてあったり????

Comments:0

Comment Form

Trackbacks:0

TrackBack URL for this entry
http://www.kadoppe.net/mt/mt-tb.cgi/72
Listed below are links to weblogs that reference
JDBCでデータを挿入した列の情報を取得する方法 from CreativeStyle

Home > プログラミング > JDBCでデータを挿入した列の情報を取得する方法

Search
Feeds
Blog Parts

あわせて読みたい フィードメーター - CreativeStyle この日記のはてなブックマーク数 kadoppeさんの体重グラフ

Return to page top