日期:2014-05-16 浏览次数:20518 次
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