⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sqlexecutorimpl.java

📁 《j2ee开发全程实录》随书源码
💻 JAVA
字号:
package com.cownew.PIS.framework.server.serviceImpl;

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

import org.hibernate.Session;

import com.cownew.PIS.framework.bizLayer.BizCtrlImpl;
import com.cownew.PIS.framework.common.multisql.SQLTranslator;
import com.cownew.PIS.framework.common.multisql.TargetDBEnum;
import com.cownew.PIS.framework.common.services.ACInfo;
import com.cownew.PIS.framework.common.services.ISQLExecutor;
import com.cownew.PIS.framework.server.helper.ACManager;
import com.cownew.PIS.framework.server.helper.ThreadVariableManager;
import com.cownew.ctk.database.DbUtils;
import com.sun.rowset.CachedRowSetImpl;

public class SQLExecutorImpl extends BizCtrlImpl implements ISQLExecutor
{

	public ResultSet execute(String sql, Object[] params) throws SQLException
	{
		return innerExecute(translateSQL(sql), params);
	}

	private ResultSet innerExecute(String sql, Object[] params)
			throws SQLException
	{
		ThreadVariableManager varMgr = ThreadVariableManager.getInstance();
		Connection conn = varMgr.getConnection();
		PreparedStatement ps = null;
		ResultSet rs = null;
		try
		{
			ps = conn.prepareStatement(sql);
			for (int i = 0, n = params.length; i < n; i++)
			{
				Object param = params[i];
				ps.setObject(i + 1, param);
			}
			ps.execute();
			rs = ps.getResultSet();
			if (rs == null)
			{
				// 如果结果集为null,则说明为update,insert之类的语句
				return null;
			}
			CachedRowSetImpl cacheRS = new CachedRowSetImpl();
			cacheRS.populate(rs);
			return cacheRS;
		} finally
		{
			DbUtils.close(ps, rs);

			// 如果结果集为null,则说明为update,insert之类的语句
			if (rs == null)
			{
				Session session = varMgr.getSession();
				// clear the hibernate cache
				session.clear();
			}
		}
	}

	public ResultSet execute(String sql) throws SQLException
	{
		return execute(sql, new Object[] {});
	}

	public void batchExecute(String[] sqlArray) throws SQLException
	{
		for (int i = 0, n = sqlArray.length; i < n; i++)
		{
			execute(sqlArray[i]);
		}
	}

	public void batchExecute(String[] sqlArray, Object[][] paramsArray)
			throws SQLException
	{
		if (paramsArray.length != sqlArray.length)
		{
			throw new AssertionError();
		}
		for (int i = 0, n = sqlArray.length; i < n; i++)
		{
			execute(sqlArray[i], paramsArray[i]);
		}
	}

	/**
	 * 翻译SQL语句,用当前帐套的数据库作为目标库
	 * 
	 * @param sql
	 * @return @
	 */
	public String translateSQL(String sql)
	{
		String acName = ThreadVariableManager.getInstance()
				.getCurrentServerUserContext().getACName();
		ACInfo acInfo = ACManager.getInstance().getACInfo(acName);
		SQLTranslator translator = SQLTranslator.getInstance(acInfo
				.getTargetDB());
		return translator.translate(sql);
	}

	/**
	 * 翻译SQL语句
	 * 
	 * @param sql
	 * @param targetDB
	 *            目标数据库
	 * @return @
	 */
	public String translateSQL(String sql, TargetDBEnum targetDB)

	{
		SQLTranslator translator = SQLTranslator.getInstance(targetDB);
		return translator.translate(sql);
	}

	public ResultSet executeDialect(String sql) throws SQLException
	{
		return innerExecute(sql, new Object[] {});
	}

	public ResultSet executeDialect(String sql, Object[] params)
			throws SQLException
	{
		return innerExecute(sql, params);
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -