详细源码见下表,绝对原创,转载请注明出处!
package com.ydj.util;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties; import javax.sql.DataSource; import com.alibaba.druid.pool.DruidDataSourceFactory; public class DAOUtil { private static DataSource source = null; static {
try {
Properties p = new Properties();
p.load(DAOUtil.class.getClassLoader().getResourceAsStream("druid.properties"));
source = DruidDataSourceFactory.createDataSource(p);
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 实现与数据库的连接
*/
public static Connection getConnection() {
Connection conn = null;
try {
conn = source.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
} /**
* 实现数据库的关闭
*/
public static void close(ResultSet set, PreparedStatement ps, Connection conn) {
try {
if(set != null) set.close();
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(ps != null) ps.close();
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(conn != null) conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
} /**
* 实现数据库表增删改的工具类
*/
public static int executeUpdate(String sql,Object...data) { Connection conn = null;
PreparedStatement ps = null;
try {
conn = DAOUtil.getConnection();
ps = conn.prepareStatement(sql);
for (int i = 0; i < data.length; i++) {
ps.setObject(i+1, data[i]);
}
return ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
DAOUtil.close(null, ps, conn);
}
return 0;
} /**
* 实现数据库表查询的工具类
*/
public static List<Map<String,Object>> executeQuery(String sql,Object...data){ Connection conn = null;
PreparedStatement ps = null;
ResultSet set = null;
try {
conn = DAOUtil.getConnection();
ps = conn.prepareStatement(sql);
for (int i = 0; i < data.length; i++) {
ps.setObject(i+1, data[i]);
}
set = ps.executeQuery();
List<Map<String, Object>> list = new ArrayList<>();
while(set.next()) {
int i = 1;
Map<String,Object> map = new HashMap<>();
while(i<=set.getMetaData().getColumnCount()) {
map.put(set.getMetaData().getColumnLabel(i), set.getObject(i));
i++;
}
list.add(map);
}
return list;
} catch (Exception e) {
e.printStackTrace();
}finally {
DAOUtil.close(set, ps, conn);
}
return null;
} }

DAO工具类的封装源码的更多相关文章

  1. Java基础知识强化63:Arrays工具类之方法源码解析

    1. Arrays工具类的sort方法: public static void sort(int[] a): 底层是快速排序,知道就可以了,用空看. 2. Arrays工具类的toString方法底层 ...

  2. Arrays工具类使用与源码分析(1)

    Arrays工具类主要是方便数组操作的,学习好该类可以让我们在编程过程中轻松解决数组相关的问题,简化代码的开发. Arrays类有一个私有的构造函数,没有对外提供实例化的方法,因此无法实例化对象.因为 ...

  3. iOS开发--QQ音乐练习,旋转动画的实现,音乐工具类的封装,定时器的使用技巧,SliderBar的事件处理

    一.旋转动画的实现 二.音乐工具类的封装 -- 返回所有歌曲,返回当前播放歌曲,设置当前播放歌曲,返回下一首歌曲,返回上一首歌曲方法的实现 头文件 .m文件 #import "ChaosMu ...

  4. Android 手势识别类 ( 二 ) GestureDetector 源码浅析

    前言:Android 关于手势的操作提供两种形式:一种是针对用户手指在屏幕上划出的动作而进行移动的检测,这些手势的检测通过android提供的监听器来实现:另一种是用 户手指在屏幕上滑动而形成一定的不 ...

  5. 为什么很多类甚者底层源码要implements Serializable ?

    为什么很多类甚者底层源码要implements Serializable ? 在碰到异常类RuntimeException时,发现Throwable实现了 Serializable,还有我们平进的ja ...

  6. Java微信公众平台接口封装源码分享

    前言:      这篇博客是在三月初动手项目的时候准备写的,但是为了完成项目只好拖延时间写这篇博客,顺便也可以在项目中应用我自己总结的的一些经验.今天看来,这些方法的应用还是可以的,至少实现了我之前的 ...

  7. Android 手势识别类 ( 三 ) GestureDetector 源码浅析

    前言:上 篇介绍了提供手势绘制的视图平台GestureOverlayView,但是在视图平台上绘制出的手势,是需要存储以及在必要的利用时加载取出手势.所 以,用户绘制出的一个完整的手势是需要一定的代码 ...

  8. Django——基于类的视图源码分析 二

    源码分析 抽象类和常用视图(base.py) 这个文件包含视图的顶级抽象类(View),基于模板的工具类(TemplateResponseMixin),模板视图(TemplateView)和重定向视图 ...

  9. netty中的发动机--EventLoop及其实现类NioEventLoop的源码分析

    EventLoop 在之前介绍Bootstrap的初始化以及启动过程时,我们多次接触了NioEventLoopGroup这个类,关于这个类的理解,还需要了解netty的线程模型.NioEventLoo ...

随机推荐

  1. 【CSP模拟赛】仔细的检查(树的重心&树hash)

    题目描述 nodgd家里种了一棵树,有一天nodgd比较无聊,就把这棵树画在了一张纸上.另一天nodgd更无聊,就又画了一张.  这时nodgd发现,两次画的顺序是不一样的,这就导致了原本的某一个节点 ...

  2. 开源GIT仓库-----gogs

    简介:Gogs 是一款极易搭建的自助 Git 服务,其目标是打造一个最简单.最快速和最轻松的方式搭建自助 Git 服务.使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语 ...

  3. ubuntu之路——day2

    一:sougou输入法安装 详情参考:https://blog.csdn.net/xin17863935225/article/details/82285177 注意切换成fcitx架构 因为linu ...

  4. 【微信小程序】scroll-view 的上拉加载和下拉刷新

    1.在微信小程序中,想到 下拉刷新 和 上拉加载,如果是整个页面都拖动的话,可以在页面配置中,配置 enablePullDownRefresh 和 onReachBottomDistance 然后在 ...

  5. python gdal ogr osgeo

  6. eclipse连接夜神模拟器方法

    用eclipse 进行安卓开发的时候我们会遇到安卓自带的模拟器启动时间过长,反应慢等的问题,这个时候我们就希望使用别的安卓模拟器,而我自己喜欢使用夜神模拟器.1.首先我们启动eclipse 和夜神模拟 ...

  7. 【E2E】Intel AI DevCloud 的申请和登陆

    参考:https://www.cnblogs.com/WaitingForU/p/9091096.html 一.注册 https://www.cnblogs.com/WaitingForU/p/909 ...

  8. spark ml pipeline构建机器学习任务

    一.关于spark ml pipeline与机器学习一个典型的机器学习构建包含若干个过程 1.源数据ETL 2.数据预处理 3.特征选取 4.模型训练与验证 以上四个步骤可以抽象为一个包括多个步骤的流 ...

  9. functools.partial偏函数的使用

    https://docs.python.org/3.6/library/functools.html 从名字可以看出,该函数的作用就是部分使用某个函数,即冻结住某个函数的某些参数,让它们保证为某个值, ...

  10. o2s【我】

    //预处理对象转String方法 private String o2s(Object o) { if(o!=null&&!"".equals(o)&& ...