All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.coder.jdbc.SqlTranction Maven / Gradle / Ivy

package cn.coder.jdbc;

import java.sql.Connection;

import java.sql.SQLException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 数据库事务处理对象
 * 
 * @author YYDF
 *
 */
public final class SqlTranction {

	private static final Logger logger = LoggerFactory.getLogger(SqlTranction.class);
	private final Connection conn;
	private final SqlTranction[] tranctions;
	private final SqlSessionBase session;

	public SqlTranction(SqlSessionBase session, Connection connection) throws SQLException {
		this(session, connection, null);
	}

	public SqlTranction(SqlSessionBase session, Connection connection, SqlTranction[] tranctions) throws SQLException {
		this.session = session;
		this.tranctions = tranctions;
		this.conn = connection;
		this.conn.setAutoCommit(false);
	}

	public Connection Connection(SqlSessionBase current) {
		if (current.equals(session))
			return this.conn;
		for (SqlTranction tran : tranctions) {
			if (current.equals(tran.getSession())) {
				return tran.Connection();
			}
		}
		throw new NullPointerException("Can not find the session tranction");
	}

	private Connection Connection() {
		return this.conn;
	}

	private SqlSessionBase getSession() {
		return this.session;
	}

	public void commit() {
		try {
			this.conn.commit();
			if (tranctions != null) {
				for (SqlTranction tran : tranctions) {
					tran.commit();
				}
			}
			logger.debug("Tranction commited");
		} catch (SQLException e) {
			logger.error("Tranction commit faild", e);
		}
	}

	public void rollback(Exception e) {
		try {
			this.conn.rollback();
			if (tranctions != null) {
				for (SqlTranction tran : tranctions) {
					tran.rollback(e);
				}
			}
			logger.debug("Tranction rollbacked");
			logger.error("Tranction error:", e);
		} catch (SQLException ex) {
			logger.error("Tranction rollback faild", ex);
		}
	}

	public void close() {
		try {
			this.conn.setAutoCommit(true);
			this.session.release(this.conn);
			if (tranctions != null) {
				for (SqlTranction tran : tranctions) {
					tran.close();
				}
			}
			logger.debug("Tranction closed");
		} catch (SQLException e) {
			logger.error("Tranction close faild", e);
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy