/*
 * $Id$
 * Copyright (c) 2006 LOGICAL-PARADOX.ORG
 */
package org.logical_paradox.rss.rcm.accessor.mysql.validator;

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

/**
 * データベース接続確認セット．
 * @author satoshi akabane@logical-paradox.org
 * @versiop $Revision$
 */
public class ConnectionValidation {
	/** データベース接続オブジェクト */
	private final Connection con;
	/** データベース接続確認クエリ */
	private final String validationQuery;

	public ConnectionValidation(Connection c, String query) {
		con = c;
		validationQuery = query;
	}
	/**
	 * 接続状態を調べる．
	 * @throws SQLException データベース接続エラー
	 */
	public void ping() throws SQLException {
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			pstmt = con.prepareStatement(validationQuery);
			rs = pstmt.executeQuery();
		} finally {
			if(rs != null) {
				rs.close();
				rs = null;
			}
			if(pstmt != null) {
				pstmt.close();
				pstmt = null;
			}
		}
	}
	/**
	 * 接続をクローズする．
	 * ただし接続が開いている状態の場合のみ．
	 * @throws SQLException クローズに失敗した
	 */
	public void close() throws SQLException {
		if(con.isClosed() == false) {
			con.close();
		}
	}
}
