package com.nfwork.dbfound.model.bean;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Map;
import com.nfwork.dbfound.core.Context;
import com.nfwork.dbfound.db.dialect.SqlDialect;
import com.nfwork.dbfound.exception.CollisionException;
import com.nfwork.dbfound.exception.DBFoundPackageException;
import com.nfwork.dbfound.util.DBUtil;
import com.nfwork.dbfound.util.ParseUtil;
/**
* 碰撞sql,检验where条件是否成立 标出message消息
*
* @author Administrator
*
*/
public class CollisionSql extends SqlEntity {
private static final long serialVersionUID = 2002950391423757459L;
private String where;
private String message;
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 添加静态参数设置
where = ParseUtil.parse(where, params);
// end 添加
String sql = dialect.getWhenSql(where);
String esql = getExecuteSql(sql, params);
// 方言处理
esql = dialect.parseSql(esql);
PreparedStatement statement = null;
ResultSet set = null;
try {
statement = conn.prepareStatement(esql);
// 参数设定
initParam(statement, sql, params);
set = statement.executeQuery();
if (set.next()) {
int flag = set.getInt(1);
if (flag != 0) {
throw new CollisionException(ParseUtil.parse(message, params));
}
}
}catch (SQLException e) {
throw new DBFoundPackageException(
"CollisionSql执行异常:" + e.getMessage(), e);
}
finally {
DBUtil.closeResultSet(set);
DBUtil.closeStatement(statement);
log(esql, params);
}
}
public String getWhere() {
return where;
}
public void setWhere(String where) {
this.where = where;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}