/*
 * blancoDbTutorial: blancoDbチュートリアル・サンプル
 * 
 * Copyright (C) 2005 tosiki.iga@nifty.ne.jp
 */

package postgresql;

import igapyon.query.SimpleTestBlancoDbTable1InsertNoNullsInvoker;
import igapyon.query.TestBlancoDbTable1UpdIterator;
import igapyon.row.TestBlancoDbTable1UpdRow;

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Date;

/**
 * 注意: このクラスをコンパイルするためには、それまでの手順で自動生成したblancoDbソースコードが必要になります。
 */
public class BlancoDbTest02PostgreSQLThread extends Thread {
	private int startCount = 0;

	public BlancoDbTest02PostgreSQLThread(int startCount) {
		this.startCount = startCount;
	}

	public void run() {
		Connection conn = null;
		try {
			conn = DriverManager.getConnection(
					BlancoDbTest02PostgreSQL.JDBC_URL,
					BlancoDbTest02PostgreSQL.JDBC_USERNAME,
					BlancoDbTest02PostgreSQL.JDBC_PASSWORD);
			conn.setAutoCommit(false);

			processInsertSelect(conn, startCount);
			conn.commit();
		} catch (SQLException ex) {
			ex.printStackTrace();
		} finally {
			try {
				conn.rollback();
				conn.close();
			} catch (SQLException ex) {
				ex.printStackTrace();
			}
			conn = null;
		}

	}

	public void processInsertSelect(Connection conn, int startCount)
			throws SQLException {
		System.out.println("更新検索の最中に挿入を行う試験します");
		TestBlancoDbTable1UpdIterator iterator = new TestBlancoDbTable1UpdIterator(
				conn);
		SimpleTestBlancoDbTable1InsertNoNullsInvoker invoker = new SimpleTestBlancoDbTable1InsertNoNullsInvoker(
				conn);
		for (int insertCount = startCount; insertCount < 15 + startCount; insertCount++) {
			invoker.setInputParameter(insertCount, (short) 1, 1, 1, 1,
					new BigDecimal(1), new BigDecimal(1), new BigDecimal(1),
					"A", "A", "A", "A", "A", "A", new Date());
			invoker.executeSingleUpdate();
		}
		conn.commit();
		try {
			for (; iterator.next();) {
				TestBlancoDbTable1UpdRow row = iterator.getRow();
				System.out.println("  getColShortNotNull:"
						+ row.getColShortNotNull());
				iterator.updateColShortNotNull((short) 2);
				iterator.updateRow();
				try {
					Thread.sleep(1000);
				} catch (InterruptedException ex) {
					// TODO 自動生成された catch ブロック
					ex.printStackTrace();
				}
				System.out.println("行[" + row.getColIntNotNull() + "]をロック中");
			}
		} finally {
			invoker.close();
			iterator.close();
		}
	}
}