1.查询emp表中的所有记录为例

2.测试类

public Emp getByNameAndEmail(String name, String email){
String sql = "select * from emp where name = ? and email = ?";
return DbUtils.query(sql, new ExtractData<Emp>() { //将次结果集封装为一个对象传过去
@Override
public Emp extract(ResultSet rs) throws SQLException {
Emp e = new Emp();
e.setId(rs.getInt(1));
e.setName(rs.getString(2));
e.setEmail(rs.getString(3));
e.setDept_no(rs.getInt(4));
e.setSalary(rs.getDouble(5));
return e;
}
}, name, email);
}

3.结果集处理的泛型的接口

public interface ExtractData<T> {

    /**
* 从结果集中提取数据封装成T对象
* @param rs-sql执行之后的结果集
* @return
*/
public T extract(ResultSet rs) throws SQLException;
}

4.jdbc和curd的封装

public class DbUtils {
private static final String DRIVERCLASS = "com.mysql.jdbc.Driver";
private static final String URL = "jdbc:mysql://127.0.0.1:3306/shop?useUnicode=true&characterEncoding=utf8";
private static final String USERNAME = "root";
private static final String PASSWORD = "12345"; static {
try {
Class.forName(DRIVERCLASS);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public static Connection getConnection() {
Connection conn = null;
  /**
     * 获取数据库连接
     * @return
     * @throws SQLException
     */
try {
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
   /**
     * 获取statement对象
     * @param conn 数据库连接对象
     * @param sql
     * @return
     * @throws SQLException
     */
public static PreparedStatement getStatement(Connection conn, String sql) {
PreparedStatement pstmt = null;
try {
pstmt = conn.prepareCall(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return pstmt;
} public static PreparedStatement getStatement(Connection conn, String sql, int key) {
PreparedStatement pstmt = null;
try {
pstmt = conn.prepareCall(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return pstmt;
}

  /**
     * 关闭连接,回收资源
     * @param conn
     * @param stmt
     */
public static void destory(Connection conn, PreparedStatement pstmt) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 执行多行行查询的方法
*/
public static <T> List<T> query(String sql, RowMapper<T> ed) {
Connection conn;
List<T> list = new ArrayList<T>();
try {
conn = getConnection();
PreparedStatement pstmt = getStatement(conn, sql); // 执行sql
ResultSet rs = pstmt.executeQuery();
list = ed.row(rs);
rs.close();
destory(conn, pstmt);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
} }

Jdbc封装和对CURD的封装的更多相关文章

  1. Redis操作Hash工具类封装,Redis工具类封装

    Redis操作Hash工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>> ...

  2. Redis操作字符串工具类封装,Redis工具类封装

    Redis操作字符串工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>>& ...

  3. future封装了callable,thread封装future。

    三.使用Callable,Future返回结果 总结:future封装了callable,thread封装future.将callable的返回结果封装在future中,thread封装future, ...

  4. 第一百六十一节,封装库--JavaScript,完整封装库文件

    封装库--JavaScript,完整封装库文件 /** *feng_zhuang_ku_1.0版本,js封装库,2016/12/29日:林贵秀 **/ /** 前台调用 * 每次调用$()创建库对象, ...

  5. 原生 Ajax 封装 和 Axios 二次 封装

    AJAX 异步的JavaScript与XML技术( Asynchronous JavaScript and XML ) Ajax 不需要任何浏览器插件,能在不更新整个页面的前提下维护数据,但需要用户允 ...

  6. 封装:WPF基于MediaElement封装的视频播放器

    原文:封装:WPF基于MediaElement封装的视频播放器 一.目的:应用MediaElement创建媒体播放器 二.效果图 三.目前支持功能 播放.暂停.停止.快进.快退.声音大小.添加播放列表 ...

  7. 10 IO流(七)——copy方法封装、关闭流方法封装的两种方式以及try...with...resource

    前言 本文将上一节做的代码,对copy方法与关闭流方法进行封装,并使用try...with...resource关闭流. copy方法封装 我们将copy方法封装,使得只需传入两个流,就能将输入流的源 ...

  8. MySQL之JDBC插入、修改、删除封装集于一个方法

    1. 先建四个包 ① com.tz.entity 实体包 ② com.tz.dao 数据访问层包 -> com.tz.dao.impl 实现包 ③ com.tz.util 工具类包 ④ com. ...

  9. Cadence封装制作之表贴封装的制作

    以0805封装为例 1.打开PCB editor-> Allegro PCB Design XL 2.File -> New ① Drawing Type -> Package Sy ...

随机推荐

  1. 2019-11-9-win10-支持默认把触摸提升-Pointer-消息

    title author date CreateTime categories win10 支持默认把触摸提升 Pointer 消息 lindexi 2019-11-09 15:32:31 +0800 ...

  2. 为什么不直接使用socket ,还要定义一个新的websocket 的呢

    大致概念: TCP/IP 协议,是网络七层协议的第四层,本身没有长连接或短连接的区别: HTTP 是基于 TCP 协议之上的「短连接」应用层协议,它的出现极大简化了网络应用的实现门槛,丰富了应用: S ...

  3. vue/cli 3.0脚手架搭建

    在vue 2.9.6中,搭建vue-cli脚手架的流程是这样的: 首先 全局安装vue-cli,在cmd中输入命令: npm install --global vue-cli  安装成功:  安装完成 ...

  4. UTF小记(一)

    前言 十六进制(简写为hex或下标16)在数学中是一种逢16进1的进位制.一般用数字0到9和字母A到F(或a~f)表示,其中:A~F表示10~15,这些称作十六进制数字. 不同电脑系统.编程语言对于1 ...

  5. python 之 字符串处理

    分割字符串 根据某个分割符分割 >>> a = '1,2,3,4' >>> a.split(',') ['] 根据多个分隔符分割 >>> line ...

  6. scrapy中下载文件和图片

    下载文件是一种很常见的需求,例如当你在使用爬虫爬取网站中的图片.视频.word.pdf.压缩包等的时候 scrapy中提供了FilesPipeline和ImagesPipeline,专门用来下载文件和 ...

  7. 第一个简单netty程序

    一个简单的netty的程序,主要是netty的客户端和服务端通信. 大部分说明都写在代码注释中 netty server TimeServer import io.netty.bootstrap.Se ...

  8. Harvest of Apples (HDU多校第四场 B) (HDU 6333 ) 莫队 + 组合数 + 逆元

    题意大致是有n个苹果,问你最多拿走m个苹果有多少种拿法.题目非常简单,就是求C(n,0)+...+C(n,m)的组合数的和,但是询问足足有1e5个,然后n,m都是1e5的范围,直接暴力的话肯定时间炸到 ...

  9. Lombock原理

    说道Lombok,可能会鲜为人知.但是在实际的开发中,它起到了很大的作用,话不多说,直入正题: 一.Lombok是什么 现在看一下Lombok官方对其进行的解释:Lombok官网:https://pr ...

  10. Kubernetes架构介绍

    目录 Kubernetes架构 k8s架构图 一.K8S Master节点 API Server Scheduler Controller Manager ETCD 二.K8S Node节点 Kube ...