代码如下(示例):

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. 知识图谱query与文本相似性如何处理
  2. (五)磁盘存储空间的管理
  3. .net网格怎么把值插入指定列表_Python列表有什么内置函数可以使用,怎么使用这些函数...
  4. MySQL HINT:Straight_JOIN
  5. access如何查询两张表的内容_为什么可以的话,不要使用星号 *,而是相应的字段名来进行查询 MySQL内连接如何选择驱动表
  6. HDU - 5015 233 Matrix(矩阵快速幂)
  7. 无限复活服务器,绝地求生无限复活模式怎么玩 无限复活新手教程
  8. Python复制数据
  9. Python实现恋爱AA公式
  10. SAP License:新总账的表结构
  11. 一行命令开启VNC 和windows之间复制粘贴功能
  12. 双非本科逆袭 拿下ACM金牌、字节和旷视offer、保研985!
  13. HDU_2082 找单词 (生成函数)
  14. DSP28335 CAN模块详解
  15. 10HTML5期末大作业:影视在线网站设计——电影网H5(9页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码
  16. iOS——Segue的使用
  17. Thinkpad E430c 16GB内存安装成功
  18. 计算机动画相关论文,计算机动画论文.doc
  19. Vivo手机实现录音转文字的方法,图文步骤详解,特别简单
  20. 国产DSP/ARM+复旦微ZYNQ/A7/K7 FPGA系列解决方案

热门文章

  1. cd /mnt/hgfs/Fiddler\ Sessions/
  2. app消息推送及监听系统消息点击
  3. 手机上的中国“轻春运”
  4. h5跳转小程序页面url_H5跳转小程序,可以跳转任意小程序,以及任意小程序的页面地址获取。...
  5. VR开发——Unity动画系统2(V客it学院技术分享)
  6. c语言随机字符rand,C语言中生产随机数 rand()函数
  7. vue axios 请求不带cookie问题
  8. 解决caught Error: [vue-router] route config “component“ for path: /login cannot be a string id. Use an
  9. windows7 切换共享文件登录域账户
  10. xgboost与gdbt区别比较