文档章节

一个简单的数据库工具类

彭苏云
 彭苏云
发布于 2014/06/05 18:12
字数 411
阅读 45
收藏 0

接上面一片博文,自己弄了一个简单的数据库操作工具类:

/*
 * 创建日期 2014-6-5
 *
 * TODO 要更改此生成的文件的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
package com.excellence.explatform.proxy.util;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

/**
 * @author pengsy
 * 
 * TODO 要更改此生成的类型注释的模板,请转至 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
public final class DBUtil {

	/**
	 * 获取数据库连接
	 * 
	 * @return
	 * @throws Exception
	 */
	public static Connection getConnection() throws Exception {
		Context context = null;
		DataSource dataSource = null;
		try {
			context = new InitialContext();
			try{
				//TOMCAT JDK1.6
				dataSource = (DataSource) context.lookup("java:comp/env/jdbc/exoa");
			}catch(Exception E){
				E.printStackTrace();
			}
			if(dataSource == null){
				//WAS JDK1.4
				dataSource = (DataSource) context.lookup("jdbc/exoa");
			}
			
			if (dataSource == null) {
				System.err.println("打开数据库连接出错!!!");
				return null;
			}
			return dataSource.getConnection();
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 执行sql语句
	 * @param sql
	 * @param params
	 * @return
	 * @throws Exception
	 */
	public static boolean executeSql(String sql, ArrayList params)
			throws Exception {
		Connection conn = getConnection();
		PreparedStatement ps = null;
		if(conn == null){
			return false;
		}
		try{
			ps = conn.prepareStatement(sql);
			for (int i = 0; i < params.size(); i++) {
				Object param = (Object) params.get(i);
				if(param instanceof String){
					ps.setString((i+1),(String) param);
				}else if(param instanceof Date){
					ps.setDate((i+1),(Date) param);
				}else{
					ps.setString((i+1),param == null ? "" : param.toString());
				}
			}
			return ps.execute();
		}catch(Exception e){
			e.printStackTrace();
			return false;
		}finally{
			if(ps != null ){
				ps.close();
			}
			conn.close();
		}
	}
	
	public static Map queryRecordInfo(String sql, ArrayList params)throws Exception {
		Connection conn = getConnection();
		PreparedStatement ps = null;
		ResultSet rs = null;
		Map resultMap = null;
		if(conn == null){
			return null;
		}
		try{
			ps = conn.prepareStatement(sql);
			for (int i = 0; i < params.size(); i++) {
				Object param = (Object) params.get(i);
				if(param instanceof String){
					ps.setString((i+1),(String) param);
				}else if(param instanceof Date){
					ps.setDate((i+1),(Date) param);
				}else{
					ps.setString((i+1),param == null ? null : param.toString());
				}
			}
			rs = ps.executeQuery();
			ResultSetMetaData metaData = ps.getMetaData();
			
			if(rs != null){
				resultMap = new HashMap();
				while(rs.next()){
					for(int i = 0 ; i < metaData.getColumnCount();i++){
						resultMap.put(metaData.getColumnName(i+1),rs.getObject(i+1));
					}
					break;
				}
			}
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(rs != null ){
				rs.close();
			}
			
			if(ps != null ){
				ps.close();
			}
			conn.close();
		}
		return resultMap;
	}
}

 

© 著作权归作者所有

共有 人打赏支持
彭苏云
粉丝 42
博文 204
码字总数 54255
作品 0
广州
高级程序员
私信 提问
加载中

评论(2)

彭苏云
彭苏云
我考虑的是放开这种限制,让其他类想自己拿连接的时候,连接的管理,就自己控制了。
Linesh
Linesh
博主你好,我们实习的时候当时自己也想尝试做一个简单的数据库操作实用类,做的过程遇到过一些问题。就您上面这个实用类,想问问getConnection()这个方法作为public暴露给调用者的用意是什么。因为我当时自己做,是把connection这一块交给DBUtils做统一管理的,我的原因是不想让调用者关注具体connection的细节。其他的设计观点也许我们也可以交流交流^_^
如何使用mybatis逆向生成工具

应某位朋友的要求,针对SSM系统,以及如何使用mybatis逆向生成工具做一个简单的介绍。本教程会讲解如何从零开始一步一步搭建出SSM系统,其中Mybatis会使用逆向工程生成工具。 开发工具:ecl...

剽悍一小兔
03/17
0
0
hibernate笔记--通过SchemaExport生成数据库表

  方法比较简单,项目中只需要两个java类(一个实体类,如User,一个工具类),两个配置文件(hibernate必须的两个配置文件hibernate.cfg.xml,与User.hbm.xml),即可都是常规的书写和配置方法,这时...

冬至饮雪
2016/03/02
0
0
JDBC设计模式:数据访问对象和值对象

一、简介 数据访问对象(DAO)封装数据库访问的细节,提供对数据库中表的粗粒度或者一次一条记录的访问。值对象(VO)封装了被访问的数据结构,有效地表示了被访问的记录。 为了更好的模块...

xuehouer
2014/05/06
0
0
关于设计模式中的策略模式

这两天要给系统做一个订单的清洗系统,简单的说就是算出一个订单到客户完成签收,公司这边的盈亏情况(感觉纯属扯淡,现在哪个电商不是烧钱的) 初步的想法是在系统里写一个工具类,准备数据,...

Oconnor
2012/12/05
339
8
数据库的统一包装工具--dbking

DBKing ========== DBKing是一款基于Java的数据库处理工具集,主要包括三项主要内容: 1、为各类数据库提供统一的操作接口,尽最大可能保障各类数据库之间的移植性 2、通过生成器创建BO类及D...

wuyuetiger
2014/05/05
1K
2

没有更多内容

加载失败,请刷新页面

加载更多

中高级面试知识点:缓存

前言 几乎所有的项目都做了缓存,但是缓存做的怎么样,其实只有我们自己知道。缓存做的好,没有网络也能流畅的使用;再多的数据请求都不会出现卡顿延迟等待很久的情况。 程序中除了图片缓存(...

Mr_zebra
11分钟前
1
0
Poco官方PPT_190-Applications双语对照翻译

因工作需要用到这一块的功能,所以直接翻译了一下 此PPT来源于官方文件,地址https://pocoproject.org/documentation.html

CHONGCHEN
14分钟前
1
1
使用idea开发servlet,引用maven后触发的class not found的问题的解决方案

需要将maven下载的依赖加入到lib目录,具体操作方法如下:打开Projrct Settings->Artifacts->右边的Output Layout,双击maven的依赖,就可以加载上去...

shatian
16分钟前
1
0
SpringMVC 拦截器

拦截器 是指通过统一拦截从浏览器发往服务器的请求来完成功能的增强 SpringMVC拦截器实现过程 1.编写拦截器,实现 org.springframework.web.servlet.HandlerInterceptor 接口 2.将拦截器注册...

晨猫
19分钟前
1
0
RabbitMQ+PHP演示实例

新建rabbit_consumer.php作为消费者 <?php //配置信息 $conn_args = array( 'host' => '127.0.0.1', 'port' => '5672', 'login' => 'admin', 'password' => ......

hansonwong
20分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部