📄 sqlexecutorimpl.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 + -