読者です 読者をやめる 読者になる 読者になる

感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

【プログラミング 26時間目】JDBC周りの勉強。トランザクション

JavaEE
<スポンサーリンク>


くそっ・・・!
このまとめが面白すぎて2時間も読み込んでしまった・・・。

勇者「すごい美人で有能な僧侶と魔法使いをお願いします」
http://minnanohimatubushi.2chblog.jp/archives/1819509.html

キャラ設定が秀逸すぎる。
ドラクエがやりたくなってしまった。

気を取り直して基礎からのサーブレットの勉強。
いやぁドラクエやりたい。

★★
カーソルとは、行を指すポインタのようなもの。
最初はどこも指していないが、next()を呼ぶ度に1行移動する。

StatementオブジェクトとResultsetオブジェクトの関係
→1つのStatementは1つのResultSetしか開いておけない。

トランザクションとは、データベースで1つの処理単位のこと。
トランザクションのサンプル

package dbsample;

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

public class TransactionSample {
	public static void main(String[] args) throws Exception {
		Connection con = null;
		Statement smt = null;
		
		try{
			con = DBManager.getConnection();
			//オートコミットをオフに設定することで、トランザクションを実行
			con.setAutoCommit(false);
			smt = con.createStatement();
			smt.executeUpdate("UPDATE ACCOUNT SET MONEY= MONEY-1000 WHERE ID=1");
			smt.executeUpdate("UPDATE ACCOUNT SET MONEY= MONEY+1000 WHERE ID=2");
			
			smt.close();
			con.commit();
			con.close();
			
		} finally {
			if(smt != null) {
				try{
					smt.close();
				} catch(SQLException ignore){
					//何もしない
				}
			}
			if(con != null) {
				try{
					con.close();
				} catch(SQLException ignore){
					//何もしない
				}
			}
		}

		
	}
}

■PreparedStatement
PreparedStatementはPrepared(準備された)という名前のとおり、プリコンパイルされたSQLを発行するためのインターフェースである。

PreparedStatementで使うSQLに入っている「?(クエスチョンマーク)」はパラメータ変数と呼ばれるもの。
setXXX()の第一引数はパラメータ変数のインデックス。第二引数が値になる。

package dbsample;

import java.sql.Connection;
import java.sql.PreparedStatement;

public class PreparedSample {
	public static void main(String[] args) throws Exception {
		
		//「?」はパラメータ変数
		String sql = "UPDATE ACCOUNT SET MONEY=? WHERE NAME=?";
		Connection con = DBManager.getConnection();
		PreparedStatement ps = con.prepareStatement(sql);
		
		//「1」は1番目の「?」という意味。MONEY=3000が入る
		ps.setInt(1, 3000);
		//「2」は2番目の「?」という意味。NAME='ボブ'が入る
		ps.setString(2,"ボブ");
		
		int count = ps.executeUpdate();
		System.out.println("update count : " + count);
		ps.close();
		con.close();
	}
}