package com.nfwork.dbfound.model.bean;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Map;
import com.nfwork.dbfound.core.Context;
import com.nfwork.dbfound.db.dialect.SqlDialect;
import com.nfwork.dbfound.exception.DBFoundPackageException;
import com.nfwork.dbfound.exception.ParamNotFoundException;
import com.nfwork.dbfound.util.DBUtil;
import com.nfwork.dbfound.util.DataUtil;
import com.nfwork.dbfound.util.ParseUtil;
public class ExecuteSql extends SqlEntity {
private static final long serialVersionUID = 7525842037480200449L;
private String generatedKeyParam;
private String affectedCountParam;
public void execute(Context context, Map<String, Param> params, String provideName) {
Connection conn = context.getConn(provideName);
SqlDialect dialect = context.getConnDialect(provideName);
// 2012年8月14日22:01:04 添加静态参数设置
sql = ParseUtil.parse(sql, params);
// end 添加
String esql = getExecuteSql(sql, params);
// 方言处理
esql = dialect.parseSql(esql);
try {
PreparedStatement statement = null;
ResultSet rs = null;
if (DataUtil.isNotNull(generatedKeyParam)){
statement = conn.prepareStatement(esql, Statement.RETURN_GENERATED_KEYS);
}else {
statement = conn.prepareStatement(esql);
}
try {
// 参数设定
initParam(statement, sql, params);
statement.execute();
// 2013年9月9日8:47:54 添加主键返回
if (DataUtil.isNotNull(generatedKeyParam)) {
rs = statement.getGeneratedKeys();
if (rs.next()) {
Param param = params.get(generatedKeyParam);
if (param == null) {
throw new ParamNotFoundException("param: " + generatedKeyParam + " 没有定义");
}
param.setValue(rs.getLong(1));
param.setSourcePathHistory("set by generatedKey");
}
}
// 2014年8月14日11:38:34 添加affectedCountParam
if (DataUtil.isNotNull(affectedCountParam)) {
int fetchSize = statement.getUpdateCount();
Param param = params.get(affectedCountParam);
if (param == null) {
throw new ParamNotFoundException("param: " + affectedCountParam + " 没有定义");
}
param.setValue(fetchSize);
param.setSourcePathHistory("set by affectedCount");
}
} finally {
DBUtil.closeResultSet(rs);
DBUtil.closeStatement(statement);
log(esql, params);
}
} catch (SQLException e) {
throw new DBFoundPackageException("ExecuteSql执行异常:" + e.getMessage(), e);
}
}
public String getGeneratedKeyParam() {
return generatedKeyParam;
}
public void setGeneratedKeyParam(String generatedKeyParam) {
this.generatedKeyParam = generatedKeyParam;
}
public String getAffectedCountParam() {
return affectedCountParam;
}
public void setAffectedCountParam(String affectedCountParam) {
this.affectedCountParam = affectedCountParam;
}
}