工具包结构

工具包代码

BeanCountHander.java

import java.sql.ResultSet;

public class BeanCountHander implements IResultSetHandler<Integer> {
@Override
public Integer handle(ResultSet rs) throws Exception {
if (rs.next()) {
return rs.getInt("count");
}
return 0;
}
}

BeanHandler.java

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.sql.ResultSet; public class BeanHandler<T> implements IResultSetHandler<T> {
private Class<T> classType; public BeanHandler(Class<T> classType) {
this.classType = classType;
} @Override
public T handle(ResultSet rs) throws Exception {
if (rs.next()) {
// 创建一个对象
T obj = this.classType.newInstance();
// 通过内省来拿属性 , Object.class
BeanInfo bf = Introspector.getBeanInfo(this.classType, Object.class); // 获取所有属性描述器
PropertyDescriptor[] pds = bf.getPropertyDescriptors();
// 遍历每一个属性的描述 器
for (PropertyDescriptor pd : pds) {
if(pd.getName().equals("anonymousName"))
continue;
Object val = rs.getObject(pd.getName());
// 给对象设置属性值
pd.getWriteMethod().invoke(obj, val);
}
return obj;
}
return null;
}
}

BeanListHandler.java

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List; public class BeanListHandler<T> implements IResultSetHandler<List<T>> { private Class<T> classType; public BeanListHandler(Class<T> classType) {
this.classType = classType;
} @Override
public List<T> handle(ResultSet rs) throws Exception {
List<T> list = new ArrayList<>();
while (rs.next()) {
// 创建一个对象
T obj = this.classType.newInstance();
// 通过内省来拿属性
BeanInfo bf = Introspector.getBeanInfo(this.classType, Object.class);
// 获取所有属性描述器
PropertyDescriptor[] pds = bf.getPropertyDescriptors();
// 遍历每一个属性的描述 器
for (PropertyDescriptor pd : pds) {
if(pd.getName().equals("anonymousName"))
continue;
Object val = rs.getObject(pd.getName());
// 给对象设置属性值
pd.getWriteMethod().invoke(obj, val);
}
// 把对象存放 到集合当中
list.add(obj);
}
return list;
}
}

IResultSetHandler.java

import java.sql.ResultSet;

public interface IResultSetHandler<T> {
T handle(ResultSet rs) throws Exception;
}

DBUtil.java

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties; public class DBUtil {
static String driver;
static String url;
static String username;
static String password;
static {
try {
// 加载配置文件
Properties p = new Properties();
FileInputStream in = new FileInputStream("resource/db.properties");
p.load(in);
driver = p.getProperty("driver");
url = p.getProperty("url");
username = p.getProperty("username");
password = p.getProperty("password");
// 加载驱动
Class.forName(driver);
} catch (Exception e) {
e.printStackTrace();
}
} public static Connection getConnection() {
try {
// 连接数据
return DriverManager.getConnection(url, username, password);
} catch (Exception e) {
e.printStackTrace();
}
return null;
} // 关闭连接
public static void close(Connection conn, Statement st, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (st != null) {
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} public static void main(String[] args) {
System.out.println(DBUtil.getConnection());
}
}

Template.java

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import edu.fzu.tmall.util.hander.IResultSetHandler; public class Template {
public static int executeUpdate(String sql, Object... params) {
try (Connection c = DBUtil.getConnection(); PreparedStatement ps = c.prepareStatement(sql)) {
// 遍历参数
for (int i = 0; i < params.length; i++) {
ps.setObject(i + 1, params[i]);
}
// 执行语句
return ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return 0;
} public static <T> T executeQuery(String sql, IResultSetHandler<T> rh, Object... params) {
ResultSet rs = null;
try (Connection c = DBUtil.getConnection(); PreparedStatement ps = c.prepareStatement(sql)) {
// 遍历参数
for (int i = 0; i < params.length; i++) {
ps.setObject(i + 1, params[i]);
}
// 执行语句
rs = ps.executeQuery();
return rh.handle(rs);
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtil.close(null, null, rs);
}
return null;
}
}

db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3307/tmall?characterEncoding=UTF-8
username=root
password=abcd

JDBC 编程工具包的更多相关文章

  1. 单独使用jdbc编程问题总结(一)

    在学习Mybatis之前,我们先来回顾JDBC编程的相关知识.在此基础上深入的学习Mybatis框架.如有错误,敬请指正. (一)首先我们既然要使用jdbc,当然是要操作数据库了.创建一个名为:myb ...

  2. 浅谈JDBC编程

    一.概述 1.为什么要用JDBC 数据库是程序不可或缺的一部分,每一个网站和服务器的建设都需要数据库.对于大多数应用程序员(此处不包含数据库开发人员)来说,我们更多的不是在DBMS中对数据库进行操纵, ...

  3. 02Mybatis_原生态jdbc编程中的问题总结——从而引生出为什么要用Mybatis

    我们先用jdbc去编写一个例子: 第一步:建表 /* SQLyog v10.2 MySQL - 5.1.72-community : Database - mybatis ************** ...

  4. JDBC编程的方式

    JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: 从上面可以看出JDBC编程一般要如下步骤: 1. 加载数据库驱动 2. 创建并获取数据库连接 3. 创建jdbc stateme ...

  5. JAVA基础知识之JDBC——编程步骤及执行SQL

    JDBC编程步骤 下面以mysql数据库为例, 1.加载驱动 首先需要下载数据库的驱动jar文件,并且在eclipse包中加入到class path中去, 例如mysql的驱动文件 mysql-con ...

  6. JDBC编程 之 增删改查

    JDBC编程之数据增加,更改,查询,删除 package com.good.jdbc; import java.sql.Connection; import java.sql.DriverManage ...

  7. JDBC编程步骤

    JDBC编程步骤 加载数据库驱动. 通常使用Class类的forName()静态方法来加载驱动. Class.forName(driverClass) dirverClass: mysql---Cla ...

  8. 【Java】JDBC编程套路

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5847020.html 学习Java开发,一个必须掌握的知识点,就是数据库操作.当程序需要用到的数据达到一定程度 ...

  9. 用JDBC编程的执行时错误及其解决大全

    用JDBC编程的执行时错误及其解决 用JDBC编程的执行时错误及其解决 源码: .java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlser ...

随机推荐

  1. 【BZOJ】4530: [Bjoi2014]大融合

    [题意]给定n个点的树,从无到有加边,过程中动态询问当前图某条边两端连通点数的乘积,n<=10^5. [算法]线段树合并+并查集 (||LCT(LCT维护子树信息 LCT维护子树信息(+启发式合 ...

  2. NGINX: 配置 HSTS

    参考: [ 浅析 HSTS - 博客园 ] [ HTTP HSTS协议和 nginx - 运维生存时间] [ HSTS ] Header: Strict-Transport-Security Stri ...

  3. 深入浅出MyBatis:JDBC和MyBatis介绍

    JDBC相关概念 Java程序都是通过JDBC连接数据库的,通过SQL对数据库编程,JDBC是由SUN公司提出的一些列规范,只定义了接口规范,具体实现由各个数据库厂商去实现,它是一种典型的桥接模式. ...

  4. [Leetcode Week14]Maximum Binary Tree

    Maximum Binary Tree 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/maximum-binary-tree/description/ ...

  5. linux 命令行远程登录 后台运行命令的方法

    linux 命令行远程登录 后台运行命令的方法 http://blog.csdn.net/isuker/article/details/55061595 Linux 技巧:让进程在后台可靠运行的几种方 ...

  6. MySQL的sql_mode解析与设置

    https://blog.csdn.net/hhq163/article/details/54140286 https://blog.csdn.net/ccccalculator/article/de ...

  7. aspxgridview export导出数据,把true显示成‘是’

    项目原因,数据库中的数据是‘true’还有‘false’,但是在页面上要显示为‘是否’,导出来的时候也是要显示成‘是否’ 要在web页面当中显示成‘是否’,只要在gridview的CustomColu ...

  8. [How to]基于本地镜像的yum镜像源搭建

    1.简介 本文介绍如何在封闭环境(无外网)下安装离线安装本地镜像与基于本地镜像的yum镜像源. 2.环境版本交代: OS:CentOS-6.7-x86_64-minimal yum: yum-3.2. ...

  9. leetcode 141 142. Linked List Cycle

    题目描述: 不用辅助空间判断,链表中是否有环 /** * Definition for singly-linked list. * struct ListNode { * int val; * Lis ...

  10. c# 多线程多文件批量下载

    废话少说,先演示一张效果图 简单说下过程喽 开发过程中其实总是会碰到项目想应用下载文件~ 看其他语言有很多封装好的类库可以使用~~ 作为小白的我并没有找到很多c#的案例可参考 后找到一款“MutThr ...