代码如下(示例):

public class DBUtils2 {/**驱动类路径*/private  static final String Driver_CLASS ="com.mysql.jdbc.Driver";/**URL地址*/private static final String URL="jdbc:mysql://localhost:3306/test";/**登录数据库服务器的账号*/private static final String USER="root";static{try {//1.加载驱动Class.forName(Driver_CLASS);} catch (ClassNotFoundException e) {e.printStackTrace();}}/**登录数据库服务器的密码*/private static final String PASSWORD="123456";/*** 返回数据库连接对象* @return*/public static Connection getcon() {try {return  DriverManager.getConnection(URL,USER,PASSWORD);} catch (SQLException e) {e.printStackTrace();}return null;}public static void close(ResultSet rs, Statement stat,Connection con){try {if(rs!=null){rs.close();}if(stat!=null){stat.close();}if(con!=null){con.close();}} catch (SQLException e) {e.printStackTrace();}}/*** 封装通用的更新操作* @param sql   需要被执行sql语句* @param params 执行sql语句时需要传递的参数* @return   执行结果*/public static boolean exeUpdate(String sql,Object...params){Connection con=getcon();PreparedStatement ps=null;try {ps=con.prepareStatement(sql);//当传入的参数不为空时执行预处理if(Objects.nonNull(params)){for (int i = 0; i <params.length ; i++) {ps.setObject(i+1,params[i]);}}//执行更新return ps.executeUpdate()>0;} catch (SQLException e) {e.printStackTrace();}finally{DBUtils2.close(null,ps,con);}return false;}public static boolean exeUpdate(Connection conn,String sql,Object...params) throws SQLException {PreparedStatement ps = null;try {ps = conn.prepareStatement(sql);//当传入的参数不为空时执行预处理if (Objects.nonNull(params)) {for (int i = 0; i < params.length; i++) {ps.setObject(i + 1, params[i]);}}//执行更新return ps.executeUpdate() > 0;} finally {DBUtils2.close(null, ps, null);}}public static Object queryOne(String sql, Callback call, Object...params){Connection con=getcon();PreparedStatement ps=null;ResultSet rs=null;try {ps=con.prepareStatement(sql);if(Objects.nonNull(params)){for(int i=0;i<params.length;i++){ps.setObject(i+1,params[i]);}rs=ps.executeQuery();//将结果集转为object返回return call.toObject(rs);}} catch (SQLException e) {e.printStackTrace();}finally {DBUtils.close(rs,ps,con);}return null;}public interface  Callback{/*** 将结果集转换为object对象* @param rs* @return*/default Object toObject(ResultSet rs){return null;}/*** 将结果转为个List集合,查询多条记录* @param rs* @return*/default List toList(ResultSet rs){return null;}}public static List<Map<String,Object>> queryToMap(String sql,Object...params) {//先申明一个List集合存储查询到的所有数据(内部的每一条数据使用一个Mao对象表示)List<Map<String,Object>> list=new ArrayList<>();Connection con= DBUtils2.getcon();PreparedStatement ps=null;ResultSetMetaData rsmd=null;try {ps=con.prepareStatement(sql);if(Objects.nonNull(params)){for(int i=0;i<params.length;i++){ps.setObject(i+1,params[i]);}}ResultSet rs=ps.executeQuery();//获取结果集元数据对象rsmd=rs.getMetaData();//获取总的查询列数int columnCount =rsmd.getColumnCount();while(rs.next()){Map<String,Object> map=new HashMap<>();//获取每一列的列标签for(int i=1;i<=columnCount;i++){//获取指定的列标签String cname=rsmd.getColumnLabel(i);//根据列标签获取列值Object value=rs.getObject(i);//将一个查询列表装入mapmap.put(cname,value);}//将map集合(javabean) 存储到Listlist.add(map);}} catch (SQLException e) {e.printStackTrace();} finally {}return list;}/*** 封装通用查询单条数据的方法** JDBC,反射,集合框架,lambda表达式,新增Objects类** @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 = queryToMap(sql, params);if (list.size() > 0) {// 获取一个Map对象Map<String, Object> map = list.get(0);// 将map集合转换为Javabean并返回return 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 = queryToMap(sql, params);// 遍历集合中每一条数据(map)maps.forEach(m -> {// 将map转换为JavabeanT obj = mapToBean(m, t);// 将Javabean装入listlist.add(obj);});return list;}/*** 将Map集合转换为一个确定的类型** @param <T>* @param map* @param t* @return*/private static <T> T mapToBean(Map<String, Object> map, Class<T> t) {try {// 根据提供的Class对象创建对应类型的ObjectT obj = t.newInstance();map.forEach((k, v) -> {try {// 根据Field名称获取字段对象Field field = t.getDeclaredField(k);// 设置字段的可访问性field.setAccessible(true);// 为字段设置值field.set(obj, v);} catch (NoSuchFieldException e) {e.printStackTrace();} catch (SecurityException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}});return obj;} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}// 返回对象return null;}

JDBC基本简易封装代码相关推荐

  1. 【QT学习】实现MVC框架的简易封装(一文读懂)

    文章目录 前言 一.MVC框架简介 1.核心部件 2.使用目的 3.MVC优点 二.具体封装步骤 1.文件管理 2.创建模型 3.创建控制器 4.MVC实现(用户登录验证为例) 总结 前言    MV ...

  2. spdlog 日志库学习,简易封装

    spdlog wiki:https://github.com/gabime/spdlog/wiki 别人的学习笔记:https://www.cnblogs.com/oucsheep/p/8426548 ...

  3. 封装成vla函数_不知道怎么封装代码?看看这几种设计模式吧!

    为什么要封装代码? 我们经常听说:"写代码要有良好的封装,要高内聚,低耦合".那怎样才算良好的封装,我们为什么要封装呢?其实封装有这样几个好处: 封装好的代码,内部变量不会污染外部 ...

  4. vue项目:(全局变量设置与调用)API接口封装 - 代码篇

    vue项目,如何将"API接口" 封装为"全局变量" ? 1. API全局配置文件[global.vue文件] <template><div& ...

  5. ajax json 封装,Ajax--json(Ajax调用返回json封装代码、格式及注意事项)

    Ajax调用json封装代码: //Ajax调用返回JSON public function JsonQuery($sql,$type=1,$db="mydb") { //定义数据 ...

  6. [Effective JavaScript 笔记]第27条:使用闭包而不是字符串来封装代码

    函数是一种将代码作为数据结构存储的便利方式,代码之后可以被执行.这使得富有表现力的高阶函数抽象如map和forEach成为可能.它也是js异步I/O方法的核心.与此同时,也可以将代码表示为字符串的形式 ...

  7. html新建通用loading,漂亮实用的页面loading(加载)封装代码

    要做一个异步登录,打算给用户做一点提示,所以就网上找了点代码,自己修改新增了一些,做了一个html+css+js的功能封装,以备未来直接使用. html 正在登陆 css /*缓冲提示条 start* ...

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

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

  9. jquery怎么判断不同的字显示不同的颜色_不知道怎么封装代码?看看这几种设计模式吧!...

    为什么要封装代码? 我们经常听说:"写代码要有良好的封装,要高内聚,低耦合".那怎样才算良好的封装,我们为什么要封装呢?其实封装有这样几个好处: 封装好的代码,内部变量不会污染外部 ...

最新文章

  1. struts2提交list
  2. SAP MM 没有维护MRP 视图的物料可以正常参与采购业务
  3. Flask框架 之abort、自定义错误、视图函数返回值与jsonify
  4. 使用XSLT制作HTML邮件模板并发送
  5. python md5_Python提取MD5
  6. 算法题目——二次函数三分求极值(HDU-3714)
  7. php如何监听页面滚动,html5中在元素滚动条在滚动时触发的事件onscroll
  8. Linux性能监控-Top
  9. hibernate.hbm.xml必须必须配置主键
  10. HDU1172 猜数字【暴力+进制】
  11. 互联网行业值得关注的10个公众号推荐(附pdf下载)
  12. 自学python在电脑上安装什么杀毒软件好_电脑上装那个杀毒软件比较好?
  13. ChinaSoft 论坛巡礼 | 服务生态系统的构建、运维与演化
  14. ubuntu服务器网站备份,备份云服务器ubuntu系统
  15. 实验吧-天网管理系统 Writeup
  16. 算法实践——数独的基本解法
  17. 手动安装 Spyder 4.0 beta 版
  18. Zalando Postgres Operator 快速上手
  19. 香的很,整理了20份可视化大屏模板
  20. c语言输出一些好看的图形,[转]好看的图形

热门文章

  1. ppt科研论文绘图入门——01
  2. 梦想Android版CAD控件2022.11.14更新(安卓CAD控件,苹果CAD控件)
  3. Centos7 进入单用户模式
  4. protobuf批量管理自动生成方案
  5. iOS开发视频教程《时空猎人横版过关》-任亮-专题视频课程
  6. python3-turtle(1)
  7. 窗帘墙布完美搭配,让居室更加温馨有品味 - 江南爱窗帘十大品牌
  8. 写作总结20221016
  9. SCADA数据采集与监控系统在制药生产过程中的应用
  10. 解决IDEA创建Maven工程时一直加载的问题