这个项目是根据jdbc,连接池,封装,object类,泛型,反射,io,lamode表达式写的一个简单的框架,里面有数据库基本的使用,通过调用该类方法,可以减少代码冗余

/** 今日解签,宜下江南* 从此江湖少了个天道,武道一肩挑的吕祖转世,* 多了个愿为徐胭脂再修三百年的洪洗象.*  ヽ\  //*     ∧∧ 。*   ゚ (゚∀゚)っ ゚*    (っノ*     `J*/package zy.db;import com.alibaba.druid.pool.DruidDataSource;import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.*;/*** 数据库工具类v2.0 将访问数据库得公共代码抽取: 1.加载驱动 2.获取连接 6.关闭资源** @author liqiuyang**/
public class DBUtils {/** 驱动类路径 */private static String DRIVER_CLASS;/** url地址 */private static String URL;/** 数据库服务器用户名 */private static String USER;/** 数据库服务器密码 */private static String PASSWORD;/**最大活动链接数*/private static int MAX_ACTIVE;/**最长等待连接获取的时间*/private static int MAX_WAIT;/**初始连接数*/private static int INIT_SIZE;/**声明连接池引用*/private static DruidDataSource ds;static {try {// 读取属性文件获取连接数据库相关的字符串InputStream is = DBUtils.class.getResourceAsStream("/jdbc2.properties");// 创建属性对象Properties p = new Properties();// 加载包含属性信息的输入流p.load(is);// 根据属性名获取属性DRIVER_CLASS = p.getProperty("driver");URL = p.getProperty("url");USER = p.getProperty("user");PASSWORD = p.getProperty("password");//获取连接池相关配置MAX_ACTIVE = Integer.parseInt(p.getProperty("pool.maxActive"));INIT_SIZE = Integer.parseInt(p.getProperty("pool.initSize"));MAX_WAIT = Integer.parseInt(p.getProperty("pool.maxWait"));//初始化连接池init();} catch (IOException e) {e.printStackTrace();}}public static void init() {if(ds == null || ds.isClosed()) {ds = new DruidDataSource();}ds.setDriverClassName(DRIVER_CLASS);ds.setUrl(URL);ds.setUsername(USER);ds.setPassword(PASSWORD);ds.setMaxActive(MAX_ACTIVE);ds.setInitialSize(INIT_SIZE);ds.setMaxWait(MAX_WAIT);}/*** 获取数据库连接对象** @return*/public static synchronized Connection getConn() {try {//当连接池被关闭或者为null重新初始化if(ds == null || ds.isClosed()) {init();}//从连接池获取一个连接并返回return ds.getConnection();} catch (SQLException e) {e.printStackTrace();}return null;}/*** 关闭资源** @param rs* @param stat* @param conn*/public static void close(ResultSet rs, Statement stat, Connection conn) {try {if (rs != null)rs.close();if (stat != null)stat.close();if (conn != null)conn.close();} catch (SQLException e) {e.printStackTrace();}}/*** 封装通用的更行操作:insert update delete** @param sql* @param params* @return*/public static boolean exeUpdate(Connection conn,String sql,Object... params) {PreparedStatement ps = null;try {ps = conn.prepareStatement(sql);if (params != null) {for (int i = 0; i < params.length; i++) {ps.setObject(i + 1, params[i]);}}return ps.executeUpdate() > 0;} catch (SQLException e) {e.printStackTrace();} finally {close(null, ps, null);}return false;}/*** 封装通用查询单条数据的方法** @param <T>* @param t* @param sql* @param params* @return*/public static <T> T queryOne(Class<T> t, String sql, Object... params) {// 获取查询到的数组集合List<Map<String, Object>> list = queryMaps(sql, params);if (list.size() > 0) {// 获取一个map集合Map<String, Object> map = list.get(0);// 将map集合转换为javaBeanreturn mapToBean(map, t);}return null;}/*** 封装查询多条数据** @param <T>* @param t* @param sql* @param params* @return*/public static <T> List<T> queryList(Class<T> t, String sql, Object... params) {List<T> list = new ArrayList<T>();// 获取所有查询到的数据List<Map<String, Object>> maps = queryMaps(sql, params);maps.forEach(m -> {// 将map转换为javaBeanT obj = mapToBean(m, t);// 将javabean装入listlist.add(obj);});return list;}/*** 将map集合转换为一个确定的类型** @param <T>* @param map* @param t* @return*/public static <T> T mapToBean(Map<String, Object> map, Class<T> t) {T obj = null;try {// 根据提供的类型创建对应类型的objectobj = t.newInstance();// 获取class中所有fieldField[] fislds = t.getDeclaredFields();// 遍历获取每一个属性对象for (Field field : fislds) {// 获取属性名String fname = field.getName();// 获取属性Object values = map.get(fname);if (values != null) {// 设置属性对象的可访问性field.setAccessible(true);// 将从map中获取的值设置给属性obj.name=xxfield.set(obj, values);}}} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}return obj;}/*** 执行相关查询之后并将结果返回List<Map<String,Object>> 集合** @param sql* @param params* @return*/public static List<Map<String, Object>> queryMaps(String sql, Object... params) {List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();Connection conn = getConn();PreparedStatement ps = null;ResultSet rs = null;try {// 获取预处理sql命令的对象ps = conn.prepareStatement(sql);if (params != null) {for (int i = 0; i < params.length; i++) {// 对指定位置的占位符填充值(预处理)ps.setObject(i + 1, params[i]);}// 执行查询获取结果rs = ps.executeQuery();// 获取结果集的元数据对象ResultSetMetaDateResultSetMetaData rsmd = rs.getMetaData();// 获取总查询数int columnCount = rsmd.getColumnCount();// 遍历结果集while (rs.next()) {// 声明map集合存储Map<String, Object> map = new HashMap<String, Object>();// 遍历获取每一列信息for (int i = 1; i <= columnCount; i++) {// 获取列名称String key = rsmd.getColumnName(i);// 获取列标签String lable = rsmd.getColumnLabel(i);// 获取列值Object values = rs.getObject(lable);// 将取到的每一列的列名与列值存储到mapmap.put(key, values);}// 将map集合装入list集合list.add(map);}}} catch (SQLException e) {e.printStackTrace();} finally {close(rs, ps, conn);}return list;}/*** 根据提供的查询语句以及查询参数,返回符合条件的数目** @param sql* @param params* @return*/public static int queryCount(String sql, Object... params) {Connection conn = getConn();PreparedStatement ps = null;ResultSet rs = null;try {ps = conn.prepareStatement(sql);if (params != null) {for (int i = 0; i < params.length; i++) {ps.setObject(i + 1, params[i]);}}rs = ps.executeQuery();if (rs.next()) {return rs.getInt(1);}} catch (SQLException e) {e.printStackTrace();}return 0;}public static void main(String[] args) {}
}

这算是到目前为止写的最复杂的工具类,综合了很多前面的知识,很值得研究

jdbc,基本数据库命令封装相关推荐

  1. Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发

    Spring JDBC     * Spring框架对JDBC的简单封装.提供了一个JDBCTemplate对象简化JDBC的开发     * 步骤:         1. 导入jar包        ...

  2. 自己动手制作的一个JDBC的套件封装,求指导

    一.背景 Java开发人员现在对数据库的操作一般会用到诸如像Hibernate,Mybatis,SpringJdbcTemplate等ORM组件,但是这些组件是怎样从原始的编码方式一步步封装过来的呢 ...

  3. java jdbc 增删改封装_JAVA JDBC 常规增删改查简单封装

    JAVA JDBC 常规增删改查简单封装,可满足大多基本要求 作用: 1, 查询列表是直接返回List对象,不必再遍历: 2, 单条查询直接返回对象: 3, 执行sql仅需一个方法搞定: packag ...

  4. 原始JDBC连接与封装后的JDBC

    JDBC连接数据库 操作步骤: 准备jar包mysql-connector-java-5.1.0-bin.jar 加载驱动Class.forName("com.mysql.jdbc.Driv ...

  5. JDBC基本简易封装代码

    代码如下(示例): public class DBUtils2 {/**驱动类路径*/private static final String Driver_CLASS ="com.mysql ...

  6. MySQL JDBC常用知识,封装工具类,时区问题配置,SQL注入问题

    JDBC JDBC介绍 Sun公司为了简化开发人员的(对数据库的统一)操作,提供了(Java操作数据库的)规范,俗称JDBC,这些规范的由具体由具体的厂商去做 对于开发人员来说,我们只需要掌握JDBC ...

  7. mysql设置约束l命令_2、MYSQL 基本数据库命令及约束

    [注]sql语句注意不要忘了后面的   "  : ",表示结束符 1.如何登陆数据库服务器 C:\Users\zhg>mysql -uroot -p Enter passwo ...

  8. jdbc封装mysql_实用JDBC数据库查询封装

    public static List queryList(String preSql, String className, Connection con, int offset, int pagele ...

  9. java mvc数据库 封装_Springmvc对就jdbc封装的操作

    解释: JdbcTemplate 封装常用的JDBC方法 HibernateTemplate  封装常用Hibernate方法 JdbcDaoSupport  JDBC数据访问对象的基类 Hibern ...

  10. jdbc封装mysql_用Java手动封装JDBC连接池(一)

    JDBC存在的问题 代码的冗余:在对数据库进行增删改查时,每个操作的JDBC流程和SQL执行代码的流程都一样,造成代码的冗余,所以我们可以把冗余的部分封装起来,封装之后,我们就不用再去写JDBC流程, ...

最新文章

  1. Android NDK开发之旅29 云服务器Ubuntu下搭建NDK环境,并编译FFmpeg
  2. gRPC 网关,针对 HTTP 2.0 长连接性能优化,提升吞吐量
  3. java之ibatis数据缓存
  4. 外部编辑Infopath的表单模板(xsn)
  5. Codeforces Round #628 (Div. 2) E. Ehab‘s REAL Number Theory Problem 巧妙的质因子建图
  6. 【HDU - 2571】 命运(记忆化搜索)
  7. 利用奇异值产生脆弱水印应用于检测、定位、恢复文章总结
  8. RN学习笔记01:概述、特点与环境搭建
  9. debian 配置linuxptp 软件时间戳
  10. 如何在VirtualBox中安装win7虚拟机?
  11. Auto病毒,落雪病毒,威金病毒,U盘病毒,魔波病毒,arp病毒,QQ病毒,熊猫烧香病毒,rose病毒清除方法
  12. 最新版chromium 76如何支持xp
  13. 若依设置匿名访问路径
  14. 爬取网易云音乐个人动态中的视频(Ⅱ): 分析并获取api
  15. JavaScript知识要点 - Web前端开发必备
  16. margin设置百分比
  17. 魔兽插件是用php吗,【图片】手把手教你制作自己的界面【魔兽插件吧】_百度贴吧...
  18. 设计模式之-代理模式
  19. [二造] 浙江土建实务案例题(索赔、结算、偏差分析)
  20. manjaro 搜狗输入法_五款良心无广告的纯净输入法推荐

热门文章

  1. Python爬取全网文字并词云分析(全程一键化!)
  2. ANO匿名飞控分析(1)— 遥控器解码
  3. 今日恐慌与贪婪指数为24 恐慌程度有所缓解
  4. 今日恐慌与贪婪指数为21 恐慌程度有所缓解
  5. 互联网信息服务安全评估报告
  6. 沃邮箱 android,沃邮箱Android客户端产品体验报告
  7. JVM内存管理------GC算法精解(五分钟让你彻底明白标记/清除算法)(4)
  8. 准备入行java怎么才能更快学习
  9. RabbitMQ安装后Web管理页面访问不了
  10. 计算机高手应该具备的知识,大学计算机基础超详细知识点(高手总结),强列推荐...