- 浏览: 89162 次
- 性别:
- 来自: 宜昌
文章分类
最新评论
-
chenaha:
不知道大哥是否会用sencha touch,我想写一个这样的效 ...
用ext读取XML写一个“省-市-邮编”三级联动
import java.io.IOException; import java.io.InputStream; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Types; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.UUID; /** * * 简单数据库访问接口 * * @author 阮智勇 * @version 3.0 */ public class DBUtil { private static DBUtil dbUtil = null; private List<Connection> idle = new ArrayList<Connection>(0); private Map<Thread, Connection> busy = new HashMap<Thread, Connection>(0); private Map<String, Connection> cache = new HashMap<String, Connection>(0); private String dialect = "ORACLE"; private int maxsize = 3; /** * 私有构造不让直接创建一个DBUtil实例 读取配置文件加载数据库配置信息,创建一定数量的连接到连接池 */ private DBUtil() { InputStream in = DBUtil.class.getClassLoader().getResourceAsStream( "db.properties"); Properties prop = new Properties(); try { prop.load(in); String driver = (String) prop.get("db.driver"); String url = (String) prop.get("db.url"); String username = (String) prop.get("db.username"); String password = (String) prop.get("db.password"); if (prop.get("db.maxsize") != null) { maxsize = Integer.parseInt(prop.get("db.maxsize").toString()); } if (prop.get("db.dialect") != null) { dialect = (String) prop.get("db.dialect"); } Class.forName(driver); for (int k = 0; k < maxsize; k++) { Connection conn = DriverManager.getConnection(url, username, password); idle.add(conn); } } catch (Exception e) { e.printStackTrace(); } finally { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 获得数据库访问接口 * * @return 数据库访问接口DBUtil单例 */ public static DBUtil getInstance() { if (null == dbUtil) { dbUtil = new DBUtil(); } return dbUtil; } /** * 获得数据库连接 * * @return 数据库连接 */ private synchronized Connection getConn() { Connection conn = null; try { if (idle.size() == 0) { wait(); } conn = idle.get(0); busy.put(Thread.currentThread(), conn); idle.remove(0); } catch (Exception e) { e.printStackTrace(); } return conn; } /** * 关闭所有对对象,归还链接到连接池 * * @param rs * 数据集对象 * @param ps * Ԥ命令对象 */ private synchronized void closeAll(ResultSet rs, PreparedStatement ps) { if (null != rs) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (null != ps) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } Connection conn = busy.get(Thread.currentThread()); if (null != conn) { idle.add(conn); busy.remove(Thread.currentThread()); notify(); } } /** * 无事务更新(不带参数) * * @param sql * SQL语句 :"update table set price=200.00" * @return 受影响行数 * @throws SQLException */ public int update(String sql) throws SQLException { int result = 0; Connection conn = null; PreparedStatement ps = null; try { conn = getConn(); ps = conn.prepareStatement(sql); result = ps.executeUpdate(); } catch (SQLException e) { throw e; } finally { closeAll(null, ps); } return result; } /** * 无事务更新(带参数) * * @param sql * SQL语句 :"delete from table where id=?" * @param params * 参数对象数组 :new Object[]{参数1,参数2,...} * @return 受影响行数 * @throws SQLException */ public int update(String sql, Object[] params) throws SQLException { int result = 0; Connection conn = null; PreparedStatement ps = null; try { conn = getConn(); ps = conn.prepareStatement(sql); for (int i = 0; i < params.length; i++) { ps.setObject(i + 1, params[i]); } result = ps.executeUpdate(); } catch (SQLException e) { throw e; } finally { closeAll(null, ps); } return result; } /** * 在事务下更新(不带参数) * * @param transId * 事务ID * @param sql * SQL语句 :"update table set price=200.00" * @return 受影响行数 * @throws SQLException */ public int update(String transId, String sql) throws SQLException { int result = 0; Connection conn = cache.get(transId); try { PreparedStatement ps = conn.prepareStatement(sql); result = ps.executeUpdate(); } catch (SQLException e) { throw e; } return result; } /** * 在事务下更新(带参数) * * @param transId * 事务ID * @param sql * SQL语句 :"delete from table where id=?" * @param params * 参数对象数组 :new Object[]{参数1,参数2,...} * @return 受影响行数 * @throws SQLException */ public int update(String transId, String sql, Object[] params) throws SQLException { int result = 0; Connection conn = cache.get(transId); try { PreparedStatement ps = conn.prepareStatement(sql); for (int i = 0; i < params.length; i++) { ps.setObject(i + 1, params[i]); } result = ps.executeUpdate(); } catch (SQLException e) { throw e; } return result; } /** * 非事务下批量更新 * * @param sql * SQL语句 :"insert into table(p1,p2,p3) values(?,?,?)" * @param params * 参数集合List<Object[]> 其中new Object[]{参数1,参数2,...} * @return 受影响行数 * @throws SQLException */ public int[] batchUpdate(String sql, List<Object[]> params) throws SQLException { int[] result = new int[params.size()]; Connection conn = null; PreparedStatement ps = null; try { conn = getConn(); conn.setAutoCommit(false); ps = conn.prepareStatement(sql); for (Object[] objects : params) { for (int i = 0; i < objects.length; i++) { ps.setObject(i + 1, objects[i]); } ps.addBatch(); } result = ps.executeBatch(); conn.commit(); } catch (SQLException e) { throw e; } finally { closeAll(null, ps); } return result; } /** * 在事务下批量更新 * * @param transId * 事务ID * @param sql * SQL语句 :"insert into table(p1,p2,p3) values(?,?,?)" * @param params * 参数集合List<Object[]> 其中new Object[]{参数1,参数2,...} * @return 受影响行数 * @throws SQLException */ public int[] batchUpdate(String transId, String sql, List<Object[]> params) throws SQLException { int[] result = new int[params.size()]; Connection conn = cache.get(transId); PreparedStatement ps = conn.prepareStatement(sql); for (Object[] objects : params) { for (int i = 0; i < objects.length; i++) { ps.setObject(i + 1, objects[i]); } ps.addBatch(); } result = ps.executeBatch(); return result; } /** * 查询(不带参数)返回List<Map<k,v>>其中k:字段名小写,v:字段值 * * @param sql * SQL语句 :"select * from table" * @return 集合List<Map<k,v>> 其中k:字段名小写,v:字段值 * @throws SQLException */ public List<Map<String, Object>> query(String sql) throws SQLException { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = getConn(); ps = conn.prepareStatement(sql); rs = ps.executeQuery(); ResultSetMetaData rsmd = rs.getMetaData(); int colCount = rsmd.getColumnCount(); while (rs.next()) { Map<String, Object> map = new HashMap<String, Object>(); for (int i = 0; i < colCount; i++) { String key = rsmd.getColumnLabel(i + 1).toLowerCase(); Object val = rs.getObject(i + 1) != null ? rs .getObject(i + 1) : ""; map.put(key, val); } list.add(map); } } catch (SQLException e) { throw e; } finally { closeAll(rs, ps); } return list; } /** * 分页查询(不带参数)返回List<Map<k,v>>其中k:字段名小写,v:字段值 * * @param sql * SQL语句 :"select * from table" * @param currPage * 第几页 * @param pageSize * 每页记录数 * @return 集合List<Map<k,v>> 其中k:字段名小写,v:字段值 * @throws SQLException */ public List<Map<String, Object>> queryPager(String sql, int currPage, int pageSize) throws SQLException { String pageSql = getPageSql(sql, currPage, pageSize); return query(pageSql); } /** * 查询(带参数)返回List<Map<k,v>>其中k:字段名小写,v:字段值 * * @param sql * SQL语句 :"select * from table where id = ?" * @param params * 参数对象数组 :new Object[]{参数1,参数2,...} * @return 集合List<Map<k,v>> 其中k:字段名小写,v:字段值 * @throws SQLException */ public List<Map<String, Object>> query(String sql, Object[] params) throws SQLException { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = getConn(); ps = conn.prepareStatement(sql); for (int i = 0; i < params.length; i++) { ps.setObject(i + 1, params[i]); } rs = ps.executeQuery(); ResultSetMetaData rsmd = rs.getMetaData(); int colCount = rsmd.getColumnCount(); while (rs.next()) { Map<String, Object> map = new HashMap<String, Object>(); for (int i = 0; i < colCount; i++) { String key = rsmd.getColumnLabel(i + 1).toLowerCase(); Object val = rs.getObject(i + 1) != null ? rs .getObject(i + 1) : ""; map.put(key, val); } list.add(map); } } catch (SQLException e) { throw e; } finally { closeAll(rs, ps); } return list; } /** * 分页查询(带参数)返回List<Map<k,v>>其中k:字段名小写,v:字段值 * * @param sql * SQL语句 :"select * from table where id = ?" * @param params * 参数对象数组 :new Object[]{参数1,参数2,...} * @param currPage * 第几页 * @param pageSize * 每页记录数 * @return 集合List<Map<k,v>> 其中k:字段名小写,v:字段值 * @throws SQLException */ public List<Map<String, Object>> queryPager(String sql, Object[] params, int currPage, int pageSize) throws SQLException { String pageSql = getPageSql(sql, currPage, pageSize); return query(pageSql); } /** * 单值查询(不带参数) * * @param sql * SQL语句 :"select name from table" * @return 单值 * @throws SQLException */ public String scalar(String sql) throws SQLException { String res = null; Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = getConn(); ps = conn.prepareStatement(sql); rs = ps.executeQuery(); if (rs.next()) { res = String.valueOf(rs.getObject(1)); } } catch (SQLException e) { throw e; } finally { closeAll(rs, ps); } return res; } /** * 单值查询(带参) * * @param sql * SQL语句 :"select name from table where id=?" * @param params * 参数对象数组 :new Object[]{参数1,参数2,...} * @return 单值 * @throws SQLException */ public String scalar(String sql, Object[] params) throws SQLException { String res = null; Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = getConn(); ps = conn.prepareStatement(sql); for (int i = 0; i < params.length; i++) { ps.setObject(i + 1, params[i]); } rs = ps.executeQuery(); if (rs.next()) { res = String.valueOf(rs.getObject(1)); } } catch (SQLException e) { throw e; } finally { closeAll(rs, ps); } return res; } /** * 执行存储过程 * * @param procName * 存储过程 * @param params * 存储过程参数对象数组 :new Object[]{参数1,参数2,...} * @param outParamNum * 输出参数个数 * @return 输出参数 * @throws SQLException */ public String[] execProc(String procName, Object[] params, int outParamNum) throws SQLException { String[] ret = new String[outParamNum]; Connection conn = null; CallableStatement cs = null; int inParamNum = (null != params) ? params.length : 0; String procSql = getProcSql(procName, inParamNum, outParamNum); try { conn = getConn(); cs = conn.prepareCall(procSql); for (int i = 0; i < inParamNum; i++) { cs.setObject(i + 1, params[i]); } for (int k = 1; k <= outParamNum; k++) { cs.registerOutParameter(inParamNum + k, Types.VARCHAR); } cs.executeQuery(); for (int k = 1; k <= outParamNum; k++) { ret[k - 1] = cs.getString(inParamNum + k); } } catch (SQLException e) { throw e; } finally { closeAll(null, cs); } return ret; } /** * 开始事务 * * @return 事务ID */ public String beginTrans() { String transId = null; try { Connection conn = getConn(); conn.setAutoCommit(false); transId = UUID.randomUUID().toString(); cache.put(transId, conn); } catch (SQLException e) { e.printStackTrace(); } return transId; } /** * 事务提交 * * @param transId * 事务ID */ public void commitTrans(String transId) { Connection conn = null; try { conn = cache.get(transId); conn.commit(); conn.setAutoCommit(true); } catch (SQLException e) { e.printStackTrace(); } finally { closeAll(null, null); cache.remove(conn); } } /** * 事务回滚 * * @param transId * 事务ID */ public void rollbackTrans(String transId) { Connection conn = null; try { conn = cache.get(transId); conn.rollback(); conn.setAutoCommit(true); } catch (SQLException e) { e.printStackTrace(); } finally { closeAll(null, null); cache.remove(conn); } } /** * 得到分页SQL语句 * @param sql 基本SQL语句 * @param currPage 当前页 * @param pageSize 每页记录数 * @return 分页SQL语句 */ private String getPageSql(String sql, int currPage, int pageSize) { StringBuffer pageSql = new StringBuffer(0); if ("oracle".equalsIgnoreCase(dialect)) { pageSql.append("SELECT * FROM(SELECT FA.*, ROWNUM RN FROM ("); pageSql.append(sql).append(") FA WHERE ROWNUM <= "); pageSql.append(currPage * pageSize).append(")WHERE RN >= ").append( (currPage - 1) * pageSize + 1); } if ("mysql".equalsIgnoreCase(dialect)) { pageSql.append(sql).append(" limit ").append( (currPage - 1) * pageSize).append(",").append(pageSize); } return pageSql.toString(); } /** * 得到存储过程语句 * * @param procName * 存储过程 * @param inParamNum * 输入参数个数 * @param outParamNum * 输出参数个数 * @return * @throws SQLException */ private String getProcSql(String procName, int inParamNum, int outParamNum) throws SQLException { StringBuffer sb = new StringBuffer(); sb.append("{call ").append(procName); int paramCount = inParamNum + outParamNum; if (paramCount > 0) { sb.append("("); for (int i = 0; i < paramCount; i++) { sb.append("?"); if (i != paramCount - 1) { sb.append(","); } } sb.append(")"); } sb.append("}"); return sb.toString(); } /** * 测试DBUtil * * @param args */ public static void main(String[] args) { try { DBUtil dao = DBUtil.getInstance(); String sql0 = "select addd from operate"; String sql = "select * from rolepower rp where rolecode = (select ur.rolecode from user u left join userrole ur on u.code = ur.usercode where u.code = 0001)"; List<Map<String, Object>> list = dao.query(sql); sql = "select * from operate"; String count = dao.scalar(sql0); // list = dao.queryPager(sql, 1, 10); System.out.println(count); System.out.println(list.size()); // System.out.println(list.get(0).get("name")); } catch (Exception e) { e.printStackTrace(); } } }
发表评论
文章已被作者锁定,不允许评论。
-
dialog
2014-01-06 15:26 0div.rzy-mask { background-co ... -
box.js
2013-12-23 15:54 730jQuery.fn.center = function(sc ... -
IE6 autocomplete
2013-12-11 10:05 633aaa -
Callable Future
2013-12-09 09:00 623package advancedJava; impor ... -
RequestContext
2013-12-06 11:30 492package util; import java.i ... -
XUtil
2013-12-04 15:21 1197package util; import java.i ... -
ActionFilter
2013-12-04 09:02 471package util; import java. ... -
最新基于Json 协议的架构
2013-12-02 23:35 718package util; import java. ... -
权限脚本
2013-11-27 09:32 522aa DROP TABLE IF EXISTS seq; ... -
主框架
2013-04-10 23:30 603<!DOCTYPE HTML PUBLIC &quo ... -
java 备份mysql
2012-07-01 01:18 774import java.io.BufferedReader;i ... -
权限管理
2012-06-23 02:14 696权限管理 -
FTPUPLOAD
2012-04-28 17:56 0package util; import java.io ... -
layout
2011-11-15 22:49 656$(function () { ... -
ligerui.css
2011-11-15 22:41 1252/* YUI CSS Reset */ html{col ... -
Accordion
2011-11-15 22:29 3079/** * jQuery ligerUI 1.0.2 * ... -
LigerUI
2011-11-13 16:52 860SDFD -
js 控件集
2011-11-06 00:39 969js 控件集 -
fileutil
2011-10-24 16:04 881import java.io.File; import ja ... -
语法高亮
2011-10-21 16:17 671语法高亮
相关推荐
Dbutil,全称为Apache Commons DbUtils,是一款由Apache软件基金会开发的开源Java工具包,它为JDBC(Java Database Connectivity)提供了一层简单的封装,旨在让数据库操作变得更加便捷且不易出错。DbUtil的设计目标...
DBUtil工具类是Java开发中常见的一种数据库操作辅助类,它的主要目的是为了简化数据库的CRUD(创建、读取、更新、删除)操作,提高开发效率。DBUtil通常集成了连接池技术,如Druid、C3P0或HikariCP等,以优化数据库...
DBUtil 是一个在ASP.NET开发环境中常用的数据库连接工具类,它的设计目的是为了简化数据库操作,减少程序员编写重复的连接和断开数据库的代码,从而提高开发效率和代码的可维护性。通过使用DBUtil,开发者可以快速地...
DBUtil工具类是Java开发中常见的一种设计,用于简化数据库操作,提高开发效率。它通常包含了一系列静态方法,可以执行SQL语句,处理结果集,进行数据库连接的创建、管理和关闭等。这样的工具类在DAO(数据访问对象)...
韩顺平SqlHelper和DBUtil工具类是为了解决这一问题而设计的,它们提供了一种方便的方式来处理SQL Server数据库。这两个工具类是非静态的,这意味着它们可以被实例化并复用,从而避免了静态类可能带来的线程安全问题...
DButil 是一个数据库操作工具类,它封装了常见的SQL操作,如模糊查询、分页查询、数据的增删改查等。这样的工具类在实际开发中非常常见,它简化了数据库交互的代码,提高了开发效率。下面将详细介绍DButil封装中的...
在Laravel框架中,`dbutil`通常指的是数据库操作的实用工具或自定义库,它扩展了Laravel原生的数据库处理能力,提供了一系列便利的方法,以帮助开发者更高效地进行数据操作。本文将深入探讨Laravel开发中的`dbutil`...
在这个场景下,`DBUtil` 类被用来简化与C3P0连接池的交互,以方便地进行数据库操作。下面我们将详细探讨`DBUtil` 的使用方法以及C3P0连接池的工作原理。 1. **C3P0简介** C3P0是由Miguel Grinberg创建的一个开源...
`DbUtil`是一个常见的数据库操作工具类,用于简化数据库连接的创建、关闭等操作,而Tomcat数据源(JNDI数据源)是应用服务器(如Tomcat)提供的一种管理数据库连接的机制。这两种方式都能有效地管理和优化数据库连接...
在Java编程中,数据库操作是不可或缺的一部分,而`dbutil`通常是指用于简化数据库操作的工具包或类库。在本场景中,我们讨论的是如何使用Java与SQL Server进行连接,以及可能涉及到的XML配置文件的修改。下面将详细...
"dbutil+c3p0"这个组合涉及到两个关键组件:DBUtils和C3P0,它们都是Java数据库连接(JDBC)的辅助工具,使得数据库操作更加高效和便捷。下面将详细阐述这两个工具以及它们在实际应用中的作用。 首先,DBUtils是...
本主题将深入探讨“通用数据库分页”以及如何通过扩展dbutil工具来实现这一功能。我们将从以下几个方面展开讨论: 1. **数据库分页原理**: 数据库分页的基本思想是将数据分成若干个页,每次只返回用户请求的一页...
DBUtil类内部包含有连接池创建和连接池的关闭,下载后记得修改URL
在IT行业中,数据库操作是核心任务之一,而DBUtil包作为一种通用的数据库操作工具,能够极大地简化编程工作。本文将详细解析DBUtil包的使用、SQL Server 2005驱动包的功能,以及ASCII编码字符集的相关知识。 首先,...
DBUtil和c3p0则是两个在Java开发中常用的数据库连接池工具,它们可以提高数据库操作的效率和性能。 **MySQL** MySQL是一个开源、免费的SQL数据库,提供了强大的数据存储和查询能力。它的优点包括高效、稳定、易于...
Struts2、DisplayTag和DbUtil是Java Web开发中常用的三个框架或库,它们在构建高效、可维护的Web应用程序中发挥着重要作用。 Struts2是Apache软件基金会下的一个开源MVC(Model-View-Controller)框架,它提供了一...
`.NET连接Mysql - MYSQL4dotNet-DBUtil`这个项目是专为使用C#语言在Windows CE(Wince)环境下连接MySQL数据库而设计的一个实用工具类库。`DBUtil.cs`文件很可能是这个库的核心组件,它提供了方便的方法来执行SQL...
本教程将围绕"DBUtil",一个简单的JDBC工具类,来介绍如何使用配置文件进行SQL连接和数据库的基本操作。这个工具类适用于初学者学习数据库连接管理。 首先,我们来看"db.properties"文件,这是用来存储数据库连接...
DBUtil的类,在WEB开发当中有许多项目都需要用它,可以不用重复写,这样很方便
Oracle JDBC DbUtil 是一个用于简化Java应用程序与Oracle数据库交互的工具包。这个工具包通过提供便利的类和方法,使得开发者能够更高效地执行SQL语句、管理数据库连接以及处理结果集。在给定的文件中,我们可以看到...