- 浏览: 592167 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (135)
- Android (18)
- 杂谈 (3)
- Struts (1)
- Java (9)
- Struts2 (4)
- MySql (16)
- Hibernate (2)
- Apache + Tomcat (4)
- eclipse (0)
- Spring (5)
- Nginx (5)
- proxool (2)
- Mongo DB (7)
- 视频处理 (5)
- Linux (6)
- Ubuntu (9)
- Exts (1)
- 北京建行个人信贷客户资信调查函 (1)
- 直播 (0)
- oschina (2)
- CAS (1)
- velocity (1)
- html编辑器 (1)
- jQuery 的360 (1)
- 硬件 (1)
- arduino (9)
- dbutils (3)
- Groovy (3)
- java基础 (1)
- PHP (2)
- 其他 (2)
- ffmpeg (3)
- 程序员工作 (1)
最新评论
-
a785975139:
简单粗暴,我喜欢
NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorld -
zhangpeili:
zhangpeili 写道
try {
...
dbutils 别名问题,dbutils MapHandler、MapListHandler 别名解决办法 -
zhangpeili:
try {
Connection co ...
dbutils 别名问题,dbutils MapHandler、MapListHandler 别名解决办法 -
atgoingguoat:
小第也要准备搞一个这样系统。有机会请前辈多指点。可以加QQ好友 ...
基于ffmpeg的电视信号采集录制系统 -
gbhtnjhu:
擦,我也遇到了,谢谢博主!
NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorld
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) { queryRunner = new QueryRunner(dataSource); int[] affectedRows = new int[0]; try { affectedRows = queryRunner.batch(sql, params); } catch (SQLException e) { e.printStackTrace(); LOG.error("update.批量修改记录错误:" + sql, e); } return affectedRows; } /** * 执行查询,将每行的结果保存到一个Map对象中,然后将所有Map对象保存到List中 * * @param sql * sql语句 * @return 查询结果 */ public List<Map<String, Object>> find(String sql) { return find(sql, null); } /** * 执行查询,将每行的结果保存到一个Map对象中,然后将所有Map对象保存到List中 * * @param sql * sql语句 * @param param * 参数 * @return 查询结果 */ public List<Map<String, Object>> find(String sql, Object param) { return find(sql, new Object[] { param }); } /** * 执行查询,将每行的结果保存到一个Map对象中,然后将所有Map对象保存到List中 * * @param sql * sql语句 * @param params * 参数数组 * @return 查询结果 */ @SuppressWarnings("unchecked") public List<Map<String, Object>> findPage(String sql, int page, int count, Object... params) { sql = sql + " LIMIT ?,?"; queryRunner = new QueryRunner(dataSource); List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); try { if (params == null) { list = (List<Map<String, Object>>) queryRunner.query(sql, new MapListHandler(), new Integer[] { page, count }); } else { list = (List<Map<String, Object>>) queryRunner.query(sql, new MapListHandler(), ArrayUtils.addAll( params, new Integer[] { page, count })); } } catch (SQLException e) { e.printStackTrace(); LOG.error("map 数据分页查询错误", e); } return list; } /** * 执行查询,将每行的结果保存到一个Map对象中,然后将所有Map对象保存到List中 * * @param sql * sql语句 * @param params * 参数数组 * @return 查询结果 */ @SuppressWarnings("unchecked") public List<Map<String, Object>> find(String sql, Object[] params) { queryRunner = new QueryRunner(dataSource); List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); try { if (params == null) { list = (List<Map<String, Object>>) queryRunner.query(sql, new MapListHandler()); } else { list = (List<Map<String, Object>>) queryRunner.query(sql, new MapListHandler(), params); } } catch (SQLException e) { e.printStackTrace(); LOG.error("map 数据查询错误", e); } return list; } /** * 执行查询,将每行的结果保存到Bean中,然后将所有Bean保存到List中 * * @param entityClass * 类名 * @param sql * sql语句 * @return 查询结果 */ public <T> List<T> find(Class<T> entityClass, String sql) { return find(entityClass, sql, null); } /** * 执行查询,将每行的结果保存到Bean中,然后将所有Bean保存到List中 * * @param entityClass * 类名 * @param sql * sql语句 * @param param * 参数 * @return 查询结果 */ public <T> List<T> find(Class<T> entityClass, String sql, Object param) { return find(entityClass, sql, new Object[] { param }); } /** * 执行查询,将每行的结果保存到Bean中,然后将所有Bean保存到List中 * * @param entityClass * 类名 * @param sql * sql语句 * @param params * 参数数组 * @return 查询结果 */ @SuppressWarnings("unchecked") public <T> List<T> find(Class<T> entityClass, String sql, Object[] params) { queryRunner = new QueryRunner(dataSource); List<T> list = new ArrayList<T>(); try { if (params == null) { list = (List<T>) queryRunner.query(sql, new BeanListHandler(entityClass)); } else { list = (List<T>) queryRunner.query(sql, new BeanListHandler(entityClass), params); } } catch (SQLException e) { e.printStackTrace(); LOG.error("Error occured while attempting to query data", e); } return list; } /** * 查询出结果集中的第一条记录,并封装成对象 * * @param entityClass * 类名 * @param sql * sql语句 * @return 对象 */ public <T> T findFirst(Class<T> entityClass, String sql) { return findFirst(entityClass, sql, null); } /** * 查询出结果集中的第一条记录,并封装成对象 * * @param entityClass * 类名 * @param sql * sql语句 * @param param * 参数 * @return 对象 */ public <T> T findFirst(Class<T> entityClass, String sql, Object param) { return findFirst(entityClass, sql, new Object[] { param }); } /** * 查询出结果集中的第一条记录,并封装成对象 * * @param entityClass * 类名 * @param sql * sql语句 * @param params * 参数数组 * @return 对象 */ @SuppressWarnings("unchecked") public <T> T findFirst(Class<T> entityClass, String sql, Object[] params) { queryRunner = new QueryRunner(dataSource); Object object = null; try { if (params == null) { object = queryRunner.query(sql, new BeanHandler(entityClass)); } else { object = queryRunner.query(sql, new BeanHandler(entityClass), params); } } catch (SQLException e) { LOG.error("返回一条记录错误:findFirst" + e.getMessage()); e.printStackTrace(); } return (T) object; } /** * 查询出结果集中的第一条记录,并封装成Map对象 * * @param sql * sql语句 * @return 封装为Map的对象 */ public Map<String, Object> findFirst(String sql) { return findFirst(sql, null); } /** * 查询出结果集中的第一条记录,并封装成Map对象 * * @param sql * sql语句 * @param param * 参数 * @return 封装为Map的对象 */ public Map<String, Object> findFirst(String sql, Object param) { return findFirst(sql, new Object[] { param }); } /** * 查询出结果集中的第一条记录,并封装成Map对象 * * @param sql * sql语句 * @param params * 参数数组 * @return 封装为Map的对象 */ @SuppressWarnings("unchecked") public Map<String, Object> findFirst(String sql, Object[] params) { queryRunner = new QueryRunner(dataSource); Map<String, Object> map = null; try { if (params == null) { map = (Map<String, Object>) queryRunner.query(sql, new MapHandler()); } else { map = (Map<String, Object>) queryRunner.query(sql, new MapHandler(), params); } } catch (SQLException e) { e.printStackTrace(); LOG.error("findFirst.查询一条记录错误" + sql, e); } return map; } /** * 查询某一条记录,并将指定列的数据转换为Object * * @param sql * sql语句 * @param columnName * 列名 * @return 结果对象 */ public Object findBy(String sql, String params) { return findBy(sql, params, null); } /** * 查询某一条记录,并将指定列的数据转换为Object * * @param sql * sql语句 * @param columnName * 列名 * @param param * 参数 * @return 结果对象 */ public Object findBy(String sql, String columnName, Object param) { return findBy(sql, columnName, new Object[] { param }); } /** * 查询某一条记录,并将指定列的数据转换为Object * * @param sql * sql语句 * @param columnName * 列名 * @param params * 参数数组 * @return 结果对象 */ public Object findBy(String sql, String columnName, Object[] params) { queryRunner = new QueryRunner(dataSource); Object object = null; try { if (params == null) { object = queryRunner.query(sql, new ScalarHandler(columnName)); } else { object = queryRunner.query(sql, new ScalarHandler(columnName), params); } } catch (SQLException e) { e.printStackTrace(); LOG.error("findBy。错误" + sql, e); } return object; } /** * 查询某一条记录,并将指定列的数据转换为Object * * @param sql * sql语句 * @param columnIndex * 列索引 * @return 结果对象 */ public Object findBy(String sql, int columnIndex) { return findBy(sql, columnIndex, null); } /** * 查询某一条记录,并将指定列的数据转换为Object * * @param sql * sql语句 * @param columnIndex * 列索引 * @param param * 参数 * @return 结果对象 */ public Object findBy(String sql, int columnIndex, Object param) { return findBy(sql, columnIndex, new Object[] { param }); } /** * 查询某一条记录,并将指定列的数据转换为Object * * @param sql * sql语句 * @param columnIndex * 列索引 * @param params * 参数数组 * @return 结果对象 */ public Object findBy(String sql, int columnIndex, Object[] params) { queryRunner = new QueryRunner(dataSource); Object object = null; try { if (params == null) { object = queryRunner.query(sql, new ScalarHandler(columnIndex)); } else { object = queryRunner.query(sql, new ScalarHandler(columnIndex), params); } } catch (SQLException e) { e.printStackTrace(); LOG.error("findBy.错误" + sql, e); } return object; } /** * * @param <T>分页查询 * @param beanClass * @param sql * @param page * @param count * @param params * @return */ public <T> List<T> findPage(Class<T> beanClass, String sql, int page, int pageSize, Object... params) { if (page <= 1) { page = 0; } return query(beanClass, sql + " LIMIT ?,?", ArrayUtils.addAll(params, new Integer[] { page, pageSize })); } public <T> List<T> query(Class<T> beanClass, String sql, Object... params) { try { queryRunner = new QueryRunner(dataSource); return (List<T>) queryRunner.query(sql, isPrimitive(beanClass) ? columnListHandler : new BeanListHandler( beanClass), params); } catch (SQLException e) { e.printStackTrace(); } return null; } private List<Class<?>> PrimitiveClasses = new ArrayList<Class<?>>() { { add(Long.class); add(Integer.class); add(String.class); add(java.util.Date.class); add(java.sql.Date.class); add(java.sql.Timestamp.class); } }; // 返回单一列时用到的handler private final static ColumnListHandler columnListHandler = new ColumnListHandler() { @Override protected Object handleRow(ResultSet rs) throws SQLException { Object obj = super.handleRow(rs); if (obj instanceof BigInteger) return ((BigInteger) obj).longValue(); return obj; } }; // 判断是否为原始类型 private boolean isPrimitive(Class<?> cls) { return cls.isPrimitive() || PrimitiveClasses.contains(cls); } // map }
第二部分:
public class PageHelp { private int pageSize; private int totalCount; private int currentPage; private int startIndex; private int[] indexes = new int[0]; private int nextIndex; private int previousIndex; private int pageCount; private List items; private int lastIndex; private String currentUrl; public String getCurrentUrl() { return currentUrl; } public void setCurrentUrl(String currentUrl) { this.currentUrl = currentUrl; } public PageHelp(List items, int totalCount, int startIndex) { pageSize = Constants.PAGE_SIZE; setPageSize(pageSize); setTotalCount(totalCount); setItems(items); setStartIndex(startIndex); } public void setTotalCount(int totalCount) { if (totalCount > 0) { this.totalCount = totalCount; int count = totalCount / pageSize; if (totalCount % pageSize > 0) { count++; } indexes = new int[count]; for (int i = 0; i < count; i++) { indexes[i] = pageSize * i; } } else { this.totalCount = 0; } } /** * 得到总记录数 * * @return */ public int getTotalCount() { return totalCount; } public void setIndexes(int[] indexes) { this.indexes = indexes; } /** * 得到分页索引的数组 * * @return */ public int[] getIndexes() { return indexes; } public void setStartIndex(int startIndex) { if (totalCount <= 0) { this.startIndex = 0; } else if (startIndex >= totalCount) { this.startIndex = indexes[indexes.length - 1]; } else if (startIndex < 0) { this.startIndex = 0; } else { this.startIndex = indexes[startIndex / pageSize]; } } /** * 当前页 * * @return */ public int getStartIndex() { return startIndex; } public void setNextIndex(int nextIndex) { this.nextIndex = nextIndex; } /** * 下一页 * * @return */ public int getNextIndex() { int nextIndex = getStartIndex() + pageSize; if (nextIndex >= totalCount) { return getStartIndex(); } else { return nextIndex; } } public void setPreviousIndex(int previousIndex) { this.previousIndex = previousIndex; } /** * 上一页 * * @return */ public int getPreviousIndex() { int previousIndex = getStartIndex() - pageSize; if (previousIndex < 0) { return 0; } else { return previousIndex; } } public void setPageCount(int pageCount) { this.pageCount = pageCount; } public int getPageCount() { int count = totalCount / pageSize; if (totalCount % pageSize > 0) count++; return count; } public int getCurrentPage() { return getStartIndex() / pageSize + 1; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public void setLastIndex(int lastIndex) { this.lastIndex = lastIndex; } public int getLastIndex() { if (indexes.length == 0) { return 0; } else { return indexes[indexes.length - 1]; } } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } /** * 得到已分页好的结果集 * * @return */ public List getItems() { return items; } public void setItems(List items) { this.items = items; }
使用方法:
考虑到分层的话可以这样使用:
public class CommonDaoImpl extends DBUtilsTemplate implements CommonDao
还可以直接new DBUtilsTemplate () 使用。
分页使用方法:
//(String sql, int page, int count, Object... params); List list= ucd.findPage(sql, p, Constants.PAGE_SIZE, "y"); int totalRows=总记录数 return new PageHelp(list, totalRows, p);
在jsp中显示分页方法:
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0"> <tr align="center"> <td> <a href="${pageList.currentUrl}&page=0">第一页</a> <a href="${pageList.currentUrl}&page=${pageList.previousIndex}">上一页</a> <c:forEach items="${pageList.indexes}" var="itempage" varStatus="stuts"> <c:choose> <c:when test="${pageList.currentPage ==stuts.index+1}"> <a style="color: red"> ${stuts.index+1}</a> </c:when> <c:otherwise> </c:otherwise> </c:choose> </c:forEach> <a href="${pageList.currentUrl}&page=${pageList.nextIndex}"> 下一页</a> <a href="${pageList.currentUrl}&page=${pageList.lastIndex}">最后页</a> 总数: ${ pageList.totalCount} 总页数: ${ pageList.pageCount} </td> </tr> </table>
解释:currentUrl 是在action中 获取PageHelp 对象后,对他的属性currentUrl 重新赋值(即:当前请求url)
放上去一个效果图吧:
补充:数据源,使用的是dbcp
public class MyDataSource { private static Properties properties; private static DataSource dataSource; static { try { properties = new Properties(); properties.load(MyDataSource.class.getResourceAsStream("/dbcpconfig.properties")); BasicDataSourceFactory b = new BasicDataSourceFactory(); dataSource = b.createDataSource(properties); } catch (Exception e) { e.printStackTrace(); } } public static DataSource getdataSource() { return dataSource; } }
数据源配置文件:
#连接设置 driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/cc username=root password=cc #初始化连接 initialSize=5 #最大连接数量 maxActive=40 #最大空闲连接 maxIdle=20 #最小空闲连接 minIdle=5 #超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 maxWait=10000 #JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;] #注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。 connectionProperties=useUnicode=true;characterEncoding=UTF-8 #指定由连接池所创建的连接的自动提交(auto-commit)状态。 defaultAutoCommit=true #driver default 指定由连接池所创建的连接的只读(read-only)状态。 #如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix) defaultReadOnly= #是否自动回收超时连接(一般是忘了释放的) removeAbandoned=true # 将被遗弃的数据库连接的回收记入日志。 logAbandoned=true # 数据库连接过多长时间不用将被视为被遗弃而收回连接池中。 removeAbandonedTimeout=30 #driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。 #可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE #defaultTransactionIsolation=REPEATABLE_READ #db.pool.default.whenExhaustedAction=grow #新增参数,用于8小时问题 testOnBorrow=true testOnReturn=false testWhileIdle=true validationQuery=select 1
相关推荐
4. **QueryRunner**:QueryRunner是DBUtils中的核心类,提供了执行SQL查询和更新的方法。它可以执行简单的SQL语句,也可以处理带有参数的PreparedStatement。 5. **结果集处理**:DBUtils提供了一些方法来处理...
2. **简化数据库连接**:DBUtils提供了`QueryRunner`类,通过它可以在一行代码内完成SQL查询或更新操作,无需手动创建Connection、PreparedStatement和ResultSet。 3. **批处理操作**:支持批量插入、更新等操作,...
本篇文章将详细探讨`dbutils`工具类的使用方法。 首先,`dbutils`主要由两个核心组件构成:`QueryRunner`和`ResultSetHandler`。`QueryRunner`用于执行SQL查询,而`ResultSetHandler`则负责处理查询结果。 1. **`...
在 DBUtils 中,最重要的组件之一是 `DBUtil` 类,它提供了一系列静态方法来执行常见的数据库操作,如执行 SQL 查询、更新、事务管理等。这些方法简化了 JDBC 编程模型,使得开发者无需手动处理连接、预编译语句、...
在数据库操作中,事务处理是确保数据一致性的重要手段,DBUtils 的 Transaction 类简化了这一过程。 4. **GracefulKiller**: 这是一个用于优雅关闭数据库连接的工具,通常配合多线程或异步编程使用。在程序退出前,...
1. **QueryRunner**:这是一个非常重要的类,它提供了执行SQL语句的方法,包括查询、更新(插入、删除、修改)以及批量操作。QueryRunner支持预编译的PreparedStatement,能有效防止SQL注入攻击。 2. **...
Python的dbutils模块是Apache的一个开源项目,它提供了一套用于数据库操作的工具类,能够帮助简化数据库连接和管理,提高开发效率。本教程将详细讲解如何对dbutils进行简单的封装,以更好地适应实际的Python数据库...
DBUtils的核心功能包括QueryRunner类,它支持预编译的SQL语句,可以有效防止SQL注入攻击。此外,DBUtils还提供了异常处理机制,使得数据库操作更加健壮。 将C3P0和DBUtils结合使用,可以构建一个高效且稳定的数据库...
1. **QueryRunner**: QueryRunner是DbUtils中的核心类,它提供了执行SQL查询和更新的方法。通过QueryRunner,你可以方便地执行SQL SELECT、INSERT、UPDATE、DELETE语句,并获取结果集或者影响行数。 2. **...
2. **QueryRunner**:QueryRunner是DBUtils的主要操作类,提供了执行SQL查询和更新的方法。例如,`query()`方法用于执行SELECT语句,返回结果集;`update()`方法用于执行INSERT、UPDATE、DELETE等操作。 3. **结果...
- **连接池管理**:DBUtils提供了`PooledDB`类,用于创建连接池,它可以复用已打开的数据库连接,减少创建和关闭连接的开销,提高性能。 - **自动重连**:如果数据库连接意外断开,DBUtils可以自动尝试重新建立...
DBUtils 是一套允许线程化 Python 程序可以安全和有效的访问数据库的模块。DBUtils已经作为 Webware for Python 一部分用来结合 PyGreSQL 访问 PostgreSQL 数据库,当然他也可以用在其他Python应用程序中来访问 DB-...
2. **QueryRunner类**:这是DBUtils的核心类,它简化了SQL查询和更新操作。例如,可以使用`QueryRunner.runQuery`执行查询,`QueryRunner.runUpdate`执行插入、更新或删除操作。 3. **预编译的SQL语句**:DBUtils...
《dbutils工具类的深度解析与应用》 在Java编程领域,数据库操作是不可或缺的一部分,而dbutils则是Java中一个非常实用的数据库操作工具库,它简化了JDBC的使用,提高了开发效率。本文将深入探讨dbutils的核心概念...
commons-dbutils包是Apache开源组织提供的用于操作数据库的工具包。简单来讲,这个工具包就是用来更加方便我们操作数据库的,最近工作中使用了一下,感觉确实方便很多,基本告别自己封装JDBC代码对数据库进行增删改...
2. 查询结果集处理:DBUtils中最常用的工具类是QueryRunner,它支持执行SQL查询和更新操作。对于查询操作,QueryRunner可以将结果集转换为Bean对象列表,方便进行数据绑定和展示。例如,通过`QueryRunner.runQuery()...
2. **QueryRunner类**:DbUtils中的`QueryRunner`类是其核心组件,它提供了执行SQL查询和更新的方法。例如,`query()`方法用于执行查询,`update()`方法用于执行DML(插入、更新、删除)操作。这些方法支持使用预...
1. **快速查询**: `QueryRunner` 类是`dbutils`的核心,它提供了执行SQL查询的简便方法,如`query()` 和 `batch()`。`query()` 用于执行查询语句并获取结果集,而`batch()` 用于执行批处理命令。 2. **结果集处理**...
1. **QueryRunner类**:这是DBUtils的主要工作类,提供了执行SQL查询和更新操作的方法。例如,`QueryRunner.runQuery()`用于执行查询,而`QueryRunner.runUpdate()`则用于执行更新、插入或删除操作。这些方法支持预...
3. **QueryRunner与SimpleJdbcInsert**:QueryRunner是DbUtils提供的一个主要类,用于执行SQL查询和更新操作。它可以处理简单的SELECT、INSERT、UPDATE和DELETE语句,以及存储过程。而SimpleJdbcInsert则简化了插入...