package dao.common;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import javax.servlet.jsp.jstl.sql.Result;
import javax.servlet.jsp.jstl.sql.ResultSupport;
/**
*
* 通用的JDBC数据库访问类
*
*/
@SuppressWarnings({"unchecked"})
public class SQLCommandBean {
private Connection conn;
private String sqlValue;
private List values;
/**
* 设定连接类
*/
public void setConnection(Connection conn) {
this.conn = conn;
}
/**
* 设定SQL语句
*/
public void setSqlValue(String sqlValue) {
this.sqlValue = sqlValue;
}
/**
* 设定SQL语句的参数
*/
public void setValues(List values) {
this.values = values;
}
/**
* 设定语句的参数
*
* @param PreparedStatement对象
* @param values参数列表
* @exception SQLException
*/
private void setValues(PreparedStatement pstmt, List values)
throws SQLException {
for (int i = 0; i < values.size(); i++) {
Object v = values.get(i);
pstmt.setObject(i + 1, v);
}
}
/**
* 执行查询
*
* @return Result对象
* @exception SQLException
*/
public Result executeQuery(){
Result result = null;
ResultSet rs = null;
PreparedStatement pstmt = null;
Statement stmt = null;
try {
if (values != null && values.size() > 0) {
pstmt = conn.prepareStatement(sqlValue);
setValues(pstmt, values);
rs = pstmt.executeQuery();
} else {
stmt = conn.createStatement();
rs = stmt.executeQuery(sqlValue);
}
result = ResultSupport.toResult(rs);
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
}
}
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
}
}
}
return result;
}
/**
* 执行Update语句
*
* @return 执行影响的行数
* @exception SQLException
*/
public int executeUpdate() {
int noOfRows = 0;
ResultSet rs = null;
PreparedStatement pstmt = null;
Statement stmt = null;
try {
if (values != null && values.size() > 0) {
pstmt = conn.prepareStatement(sqlValue);
setValues(pstmt, values);
noOfRows = pstmt.executeUpdate();
} else {
stmt = conn.createStatement();
noOfRows = stmt.executeUpdate(sqlValue);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
}
}
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
}
}
}
return noOfRows;
}
}