日期:2014-05-16 浏览次数:20622 次
dbutils通用类,dbutils分页查询,第一部分是公共类,封装好了操作数据库的方法。第二部分是分页的bean。
?
第一部分:
public class DBUtilsTemplate {
private DataSource dataSource;
private QueryRunner queryRunner;
private static final Log LOG = LogFactory.getLog(DBUtilsTemplate.class);
public DBUtilsTemplate(DataSource dataSources) {
this();
}
public DBUtilsTemplate() {
dataSource = MyDataSource.getdataSource();
}
/**
*
* @param sql
* 插入sql语句
* @param params
* 插入参数
* @return 返回影响行数
*/
public int insert(String sql, Object[] params) {
queryRunner = new QueryRunner(dataSource);
int affectedRows = 0;
try {
if (params == null) {
affectedRows = queryRunner.update(sql);
} else {
affectedRows = queryRunner.update(sql, params);
}
} catch (SQLException e) {
e.printStackTrace();
LOG.error("insert.插入记录错误:" + sql, e);
}
return affectedRows;
}
/**
* 插入数据库,返回自动增长的主键
*
* @param sql -
* 执行的sql语句
* @return 主键 注意;此方法没关闭资源
*/
public int insertForKeys(String sql, Object[] params) {
int key = 0;
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
conn = dataSource.getConnection();
stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
ParameterMetaData pmd = stmt.getParameterMetaData();
if (params.length < pmd.getParameterCount()) {
throw new SQLException("参数错误:" + pmd.getParameterCount());
}
for (int i = 0; i < params.length; i++) {
stmt.setObject(i + 1, params[i]);
}
stmt.executeUpdate();
rs = stmt.getGeneratedKeys();
if (rs.next()) {
key = rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
LOG.error("insertForKey.插入返回主键错误:" + sql, e);
} finally {
if (rs != null) { // 关闭记录集
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) { // 关闭声明
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) { // 关闭连接对象
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return key;
}
private ScalarHandler scalarHandler = new ScalarHandler() {
@Override
public Object handle(ResultSet rs) throws SQLException {
Object obj = super.handle(rs);
if (obj instanceof BigInteger)
return ((BigInteger) obj).longValue();
return obj;
}
};
public long count(String sql, Object... params) {
Number num = 0;
try {
queryRunner = new QueryRunner(dataSource);
if (params == null) {
num = (Number) queryRunner.query(sql, scalarHandler);
} else {
num = (Number) queryRunner.query(sql, scalarHandler, params);
}
} catch (SQLException e) {
e.printStackTrace();
LOG.error("count.统计数量错误" + sql, e);
}
return (num != null) ? num.longValue() : -1;
}
/**
* 执行sql语句
*
* @param sql
* sql语句
* @return 受影响的行数
*/
public int update(String sql) {
return update(sql, null);
}
/**
* 单条修改记录
*
* @param sql
* sql语句
* @param param
* 参数
* @return 受影响的行数
*/
public int update(String sql, Object param) {
return update(sql, new Object[] { param });
}
/**
* 单条修改记录
*
* @param sql
* sql语句
* @param params
* 参数数组
* @return 受影响的行数
*/
public int update(String sql, Object[] params) {
queryRunner = new QueryRunner(dataSource);
int affectedRows = 0;
try {
if (params == null) {
affectedRows = queryRunner.update(sql);
} else {
affectedRows = queryRunner.update(sql, params);
}
} catch (SQLException e) {
e.printStackTrace();
LOG.error("update.单条修改记录错误:" + sql, e);
}
return affectedRows;
}
/**
* 批量修改记录
*
* @param sql
* sql语句
* @param params
* 二维参数数组
* @return 受影响的行数的数组
*/
public int[] batchUpdate(String sql, Object[][] params) {
queryRu