文档章节

一个简单的数据库工具类

彭苏云
 彭苏云
发布于 2014/06/05 18:12
字数 411
阅读 44
收藏 0
点赞 0
评论 2

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

/*
 * 创建日期 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的细节。其他的设计观点也许我们也可以交流交流^_^
如何使用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
轻量级的ORM框架--u-orm

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

guofeimeng
2012/02/14
4.8K
2
数据库的统一包装工具--dbking

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

wuyuetiger
2014/05/05
1K
2
反射+注释,根据实体类对象生成SQL语句工具类

最近在写一个公司内部项目,由于觉得配置Hibernate过于繁琐,索性使用了spring的jdbc,可是又要写很多的sql语句,为了偷偷懒,于是就写个能通过实体类对象生成SQL语句的工具类。 目前只在MyS...

冰小块
2012/05/05
0
2
35、最简单的mvc框架tiny,V2版原理图、设计

在前面的v1版,由于我们临时起意,存在不少问题,我重新设计框架v2版chen(重名问题改名为chen)。 原理图如下: 先说下chen框架的功能: restful地址支持(chen中叫路由)。 mvc功能,使用简...

青青小树
2014/04/26
0
6
Python3 初学实践案例(9)sqlacodegen 根据已有数据库生成 ORM 使用的 model.py

Python3 初学实践案例(9)sqlacodegen 根据已有数据库生成 ORM 使用的 model.py 前面我们在连接数据库的时候,我们使用的是 语句来实现的。但是组织 语句是一个比较困难的事情,因此,我们可...

FungLeo
2017/12/21
0
0
SpiderDB 1.6 发布

SpiderDB 是一个轻量级的数据库结构扒取工具,使用 Java 开发。它是一个简单的类库可根据数据库的表结构来生成 POJO 对象,使用简单,支持各种不同的数据库系统。 该版本增加对 Oracle 数据库...

红薯
2010/10/03
435
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

CentOS “Destination Host Unreachable”问题解决办法

挑战极速安装CentOS时遇到局域网主机不能通信的情况: [root@zjd network-scripts]# ping 8.8.8.8PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.64 bytes from 8.8.8.8: icmp_seq=1 ttl=......

wffger
5分钟前
0
0
CentoOS6.6安装netcat

CentOS下安装netcat 使用zookeeper过程中,需要监控集群状态。在使用四字命令时(echo conf | nc localhost 2181),报出如下错误:-bash: netcat: command not found。 我的系统是CentOS 6....

ghou-靠墙哭
15分钟前
0
0
es6之解构赋值巧用

ES6 允许按照一定模式,从数组、对象等中提取值,对变量进行赋值,这被称为解构赋值。 如何进行解构赋值我这里就不赘述,本篇文章主要是将解构赋值的巧妙使用之处。 1、交互变量的值 常用交互...

秋季长青
21分钟前
0
0
Elasitcsearch High Level Rest Client学习笔记(三)批量api

Bulk Request BulkRequest可以在一起从请求执行批量添加、更新和删除,至少需要添加一个操作 BulkRequest request = new BulkRequest(); //创建BulkRequestrequest.add(new IndexRequest("...

木子SMZ
24分钟前
0
0
mybatis-dynamic sql

OGNL expressions if 判断是否存在值 <select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <if test="title != null"> AND title like #{tit......

writeademo
31分钟前
0
0
社交系统ThinkSNS+ V1.8.3更新播报

     研发发布版本号:1.8.3   本次版本于2018年7月16日发布   本次发布类型:新增功能、细节调整与优化   社交系统ThinkSNSPlus更新体验:请于官网下载/安装最新版或联系QQ35159...

ThinkSNS账号
35分钟前
0
0
教育思考:选择编程是一场父母和孩子的和解[图]

教育思考:选择编程是一场父母和孩子的和解[图]: 之前有个很热的段子是这样讲的:深夜十点的时候,某小区一女子大声喊叫“什么关系?啊?!到底什么关系?你说!”最后发现原来是一位妈妈陪...

原创小博客
35分钟前
0
0
X64汇编之指令格式解析

最近由于项目组内要做特征码搜索的东西,便于去Hook一些未导出函数,你懂得...于是就闲着学习了一下x86/x64的汇编指令格式。x86的汇编指令格式请参照http://bbs.pediy.com/showthread.php?t...

simpower
38分钟前
0
0
rust 语法概要(只适合不熟悉时快速查阅使用,不适合理解其精髓。未完待续)

注意:本内容只适合快查,不适合理解精髓。精髓请研读 https://kaisery.github.io/trpl-zh-cn/foreword.html 基本数据类型 i8,i16,i32,i64,i128 u8,u16,u32,u64,u128 f32,f64 char bool:true...

捍卫机密
41分钟前
0
0
JS中严格模式和非严格模式

1,使用 严格模式的使用很简单,只有在代码首部加入字符串 "use strict"。必须在首部即首部指其前面没有任何有效js代码除注释,否则无效 2.注意事项 (1)不使用var声明变量严格模式中将不通...

AndyZhouX
42分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部