文档章节

一个简单的数据库工具类

彭苏云
 彭苏云
发布于 2014/06/05 18:12
字数 411
阅读 47
收藏 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的细节。其他的设计观点也许我们也可以交流交流^_^
hibernate笔记--通过SchemaExport生成数据库表

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

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

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

剽悍一小兔
2018/03/17
0
0
JDBC设计模式:数据访问对象和值对象

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

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

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

Oconnor
2012/12/05
376
8
招募人员加入开源项目db-unifier

db-unifier ========== db-unifier是一款基于Java的数据库处理工具集,主要包括三项主要内容: 1、为各类数据库提供统一的对象包装和操作接口 2、通过JDBC的DAO层代码生成器 3、为各种数据库...

wuyuetiger
2014/05/18
628
5

没有更多内容

加载失败,请刷新页面

加载更多

第1章

背景:因为最近在考教师资格证,考的是计算机学科,所以学科考的是:信息技术学科知识与教学能力;因此图书馆借了一本书,把最基本的知识看一遍,为之后的笔试和面试做充足的准备。 大学计算...

怪咖先生forever
今天
1
0
element-ui之el-collapse-transition(折叠展开动画)源码解析学习

项目中发现同事使用了element-ui的el-collapse-transition来做折叠展开效果,打开源码看了下发现挺有意思,来解析学习一番。 el-collapse-transition的引入方式 // fade/zoom 等import 'e...

学霸猫
今天
1
0
解释器模式_实战

前言 解释器模式是什么?这个设计模式其实比较冷门,不太会解释,用例子说明把。解释器模式一般用在sql,xml,json解析等场景。比如说你有一个json对象,你要获取这个对象中任意一个节点的值。...

grace_233
今天
6
0
告别2018

今天中午从喵喵家回来之后,倒头就睡到下午4点了。可能是之前透支的身体,在我放松下来后,开始觉得疲惫了,所以最近估计会进入嗜睡期。醒来之后,拿了包花生,开了瓶低糖菊花茶,听着网易云...

七木网络科技
今天
4
0
MySql数据库分表分区实践

1. 背景 —— 公司物联网项目 海量设备通过物联网服务接入云端,设备每30s上报一次自身数据(以下称为动态数据)。 物联网服务将设备上报的数据转发给数据处理网关,由数据入库网关执行批量入...

吴伟祥
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部