文档章节

一个简单的数据库工具类

彭苏云
 彭苏云
发布于 2014/06/05 18:12
字数 411
阅读 44
收藏 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;
	}
}

 

© 著作权归作者所有

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

评论(2)

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

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

冬至饮雪
2016/03/02
0
0
如何使用mybatis逆向生成工具

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

剽悍一小兔
03/17
0
0
关于设计模式中的策略模式

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

Oconnor
2012/12/05
339
8
JDBC设计模式:数据访问对象和值对象

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

xuehouer
2014/05/06
0
0
轻量级的ORM框架--u-orm

u-orm 是一个适用、快速、简单、轻量级的 Java ORM 小型框架,无第三方包依赖,只有一个commons-logging.jar ,为了日志输出。整个jar包只有121KB,并封装了很多实用的操作函数,详细见api中的...

guofeimeng
2012/02/14
4.8K
2

没有更多内容

加载失败,请刷新页面

加载更多

Java 并发编程原理

为什么要使用多线程? 通过多线程提高吞吐量 伸缩性比较好,可以增加 CPU 核心来提高程序性能 什么场景下使用多线程? 如:tomcat BIO Java 如何实现多线程? Thread、Runnable、ExecutorSer...

aelchao
19分钟前
1
0
谨慎的覆盖clone方法

说在前面 有些专家级程序员干脆从来不去覆盖clone方法,也从来不去调用它,除非拷贝数组。 其他方式 可以提供一个构造函数或者工厂去实现clone功能。 相比于clone,它们有如下优势: 不依赖于...

XuePeng77
19分钟前
0
0
什么是最适合云数据库的架构设计?

分布式数据库技术发展多年,但是在应用、业务的驱动下,分布式数据库的架构一直在不断发展和演进。 开源金融级分布式数据库SequoiaDB,经过6年的研发,坚持从零开始打造数据库核心引擎。在技...

巨杉数据库
28分钟前
0
0
源码模仿之RPC

源码模仿之RPC RPC - 远程过程调用,概念不多赘述,可自行百度。 场景 统一api接口 生产者(提供远程接口调用方) 使用者(主动调用远程接口) 代码实现 API接口(公共依赖包) DemoEntity (...

GMarshal
29分钟前
0
0
Linux之安装Tomcat8

最近要在Linux上安装Tomcat,记录下 1.进入tomcat8的安装目录 List-1 root@iZwz9bjiawhqzfsklyht4rZ bin]# pwd/opt/app/tomcat8/bin[root@iZwz9bjiawhqzfsklyht4rZ bin]# ll总用量 83......

克虏伯
29分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部