- 浏览: 1192101 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (298)
- 随心所欲 (21)
- 编程学习 (23)
- 互联网研究 (10)
- html分析 (7)
- hibernate (27)
- spring (10)
- httpclient (10)
- eclipse (4)
- 织梦建站 (9)
- photoshop (6)
- C# (3)
- .net (0)
- javascript (9)
- CSS (3)
- 数据库 (12)
- java (52)
- 服务器 (4)
- 日志记录 (3)
- 电脑维护 (29)
- quartz (5)
- 图像处理 (4)
- 搜索引擎 (3)
- struts2 (37)
- Java Web (6)
- commons-lang (1)
- 二维码 (1)
- 项目心得 (20)
- jquery (6)
- php (4)
- 办公软件 (1)
- xpath (2)
- 算法 (10)
- Android (2)
- swing swt (5)
- office (1)
- SEO (1)
最新评论
-
xinglianxlxl:
对我有用,谢谢
jQuery UI Datepicker插件timepicker时分秒 -
di1984HIT:
太好了,谢谢啊。
JAVA调用系统方法打开网页 -
di1984HIT:
学习了,谢谢您~
SQLite在Java中的使用 -
zhongchongwen001:
mark
Java解析HTML之HTMLParser使用与详解 -
cai21cn:
算法有问题,会产生不可见字符,造成信息丢失
Java中的MD5信息摘要算法
package org.lyq.dao;
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 2.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_cfg.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();
}
}
}
- 经典的数据库接口.zip (3.6 KB)
- 下载次数: 21
发表评论
-
使用ffmpeg 合并音频视频
2018-05-17 09:13 3516ffmpeg -i 1.mp4 -i 1.m4a -vcode ... -
CMD一键获取 所有连接过的WIFI密码
2017-08-05 21:12 1135for /f "skip=9 tokens=1,2 ... -
eclipse中文版官方下载
2015-06-07 10:27 2907目前eclipse的使用已经越来越广泛,它不 ... -
MAC地址
2014-12-28 13:18 748网卡MAC码是由全球惟一的一个固定组织来分配的,未经认证和授 ... -
Java GZIP压缩的使用
2014-04-23 19:43 1618为了减小服务器负担,传递字符串内容通常要进行压缩,同时也能增 ... -
Java获取屏幕分辨率与系统中的字体
2013-12-26 13:14 1310Java获取屏幕分辨率与系统中的 ... -
Java获取系统属性
2013-12-26 13:00 892获取系统中的属性可以使用java.lang.System中的 ... -
对称加密算法DES&AES
2013-12-23 14:29 3749对称加密算法是应用较早的加密算法,技术成熟。在 ... -
BASE64与单向加密算法MD5&SHA&MAC
2013-12-23 12:59 2379这里我们主要描述Java已经实现的一些加密解密算法, ... -
如何获取远程WEB服务器的时间
2013-12-21 16:44 7271获取远程WEB服务器的时间可以利用服务器返回的头信息获 ... -
JAVA调用系统方法打开网页
2013-12-19 14:48 1399JAVA调用系统方法打开网页: import ... -
HTML字符正则表达式替换
2012-09-14 16:35 0public string Convert(string so ... -
完完全全学习Java正则表达式
2012-06-15 10:44 1165在网上找了好久也没找到个合适的正则表达式以过滤特殊字符;自己学 ... -
NekoHtml xpath 解析内容时需要注意的地方
2012-05-30 20:33 2918如果需要在HTML页面中提取数据,那么NekoHTML 是个不 ... -
java中获取当前类所在的目录
2012-05-12 15:05 1228一、前提: 在java的程序设计中有时候会要访问类所在的文件 ... -
FCKeditor2.6 for JSP 配置方法
2012-04-09 19:34 9001、首先登陆www.fckeditor.n ... -
JS操作Fckeditor的一些常用方法
2012-04-09 13:07 1227//向编辑器插入指定代码 function insertHTM ... -
JSON工具类
2012-04-03 20:05 1240/** * JSON工具类 */public class Js ... -
NekoHtml 解析内容时需要注意的地方
2012-03-29 12:31 1256如果需要在HTML页面中提 ... -
NekoHtml 乱码出现问号的解决
2012-03-29 12:29 1741neko能够自动对HTML字符中的转义字符进 ...
相关推荐
在IT领域,数据库访问接口是连接应用程序与数据库系统的关键组件,允许程序执行查询、更新、插入和删除等操作。本文将详细阐述Oracle、MS SQL SERVER和Access这三种常见数据库的访问接口实现,以及如何设计一个通用...
### 数据库访问接口技术:MFC中的ODBC与ADO #### 概述 数据库访问接口技术是计算机科学中一个至关重要的领域,它涉及到如何高效、安全地与数据库系统进行交互。在众多数据库访问技术中,ODBC(Open Database ...
数据库访问接口技术数据库访问接口技术
数据库访问接口 本章节介绍了数据库访问接口的基本概念和几种常见的数据库访问接口,如ODBC、JDBC、OLE DB和数据库网关。这些接口为开发者提供了统一的访问方式,实现了开放数据库的互联,并大大减小了编程的工作量...
支持国产达梦数据库(通过dpi接口集成),支持mysql数据库(通过libmysqlclient集成),支持sqlite数据库(通过sqlite3接口集成),支持oracle数据库(通过oci接口集成),支持sqlserver(通过odbc接口); 提供统一的C++抽象接口,...
开发软件时,可以参考使用此封装的数据库访问类
本篇将详细探讨如何利用这两者来实现一个通用的数据库访问接口,以适应不同类型的数据库操作。 首先,让我们理解什么是注解。注解是Java提供的一种元数据,它可以提供一种方式来添加额外的信息到源代码中,这些信息...
开放的数据库访问接口为数据库应用程序开发人员访问与不同的、异构的数据库提供了统一的访问方式,采用这种数据库接口可以通过编写一段代码实现对多种类型数据库的复杂操作。实现了开放数据库的互联,并大大减小了...
数据库访问接口是软件系统与数据库管理系统(DBMS)交互的关键技术,它允许程序员通过标准的接口来连接和操作各种类型的数据库。本讲座共112张PPT,深入讲解了数据库访问接口的主要技术和应用。 首先,数据库访问...
### 基于.NET框架的通用数据库访问接口研究与实现 #### 1. 引言 随着信息技术的迅速发展,数据库技术也在不断进步,并且在各个行业中得到了广泛应用。在实际项目开发过程中,开发者经常会遇到需要支持多种不同类型...
在 Hibernate 中,数据库访问接口的设计是至关重要的,因为它提供了与数据库交互的桥梁,简化了传统的 JDBC 编程,提高了开发效率和代码的可维护性。 ### 1. Session 接口 Hibernate 的核心接口是 `Session`,它...
本源码提供了一个基于C#的Bouyei.DbFactory统一数据库访问接口库设计。项目包含263个文件,其中包括227个C#源文件、8个CSPROJ文件、7个DLL文件、6个CONFIG文件、3个PFX文件、2个GITIGNORE文件、2个Markdown文档、2个...
数据库访问接口是软件系统与数据库管理系统(DBMS)交互的关键技术,主要目的是简化数据库应用程序的开发,使得开发者可以通过统一的接口来访问不同类型的数据库,从而实现数据的跨平台、跨数据库系统的互操作性。...
数据库DLL接口方式是一种在软件开发中使用动态链接库(DLL)来实现数据库访问的方法。DLL是一种可执行代码的模块,可以被多个程序共享,减少了内存占用并简化了代码管理。"DLLWizardInterfaceMode"可能指的是一个...
【VC++数据库访问接口的研究】 在VC++编程中,数据库访问是常见的需求,为了实现这一功能,Microsoft提供了多种接口供开发者使用。本文主要探讨了DAO(数据访问对象)、OLE/DB、ADO(活动数据对象)和ODBC(开放...
在"数据库三层架构通用代码 访问层 数据库接口"的场景中,通用类库源码可能包含以下内容: - 数据库连接池:如C3P0、Druid或HikariCP,用于高效管理和复用数据库连接。 - DAO(Data Access Object)接口和实现:...
QJ 20063-2011 异构数据库数据接口要求定义了不同数据库之间数据如何交换的协议和执行标准。
在IT行业中,数据库存储接口是应用程序与数据库进行通信的关键组件。这个"连接数据库存储接口"的示例,正如标题所示,已经通过了测试并被实际项目采用,这意味着它提供了一个可靠的模板来实现与SQL数据库的连接,...
这是本人自己写的一个php面向对象的数据库访问接口。可以对mysql数据库进行操作。能够完成数据的增、删、查、改基本操作。其中还包括乐意分页显示的模块,可用于web开发中。由于时间匆忙,有些功能还不完善,大家...