使用JDBC(Dbutils工具包)来从数据库拿取map类型数据来动态生成insert语句

简介: 前言:大家在使用JDBC来连接数据库时,我们通过Dbutils工具来拿取数据库中的数据,可以使用new BeanListHandler<>(所映射的实体类.class),这样得到的数据,不知道表的字段名字,我们在往数据库里添加时,需要自己来挨个写字段,非常麻烦!于是,小编想到通过MapListHandler(),结果集为一个List<Map<String, Object>>,map中key为数据库字段名字,value为对应的值,这样就可以实现insert语句动态拼接了!!

使用JDBC(Dbutils工具包)来从数据库拿取map类型数据来动态生成insert语句


前言:

大家在使用JDBC来连接数据库时,我们通过Dbutils工具来拿取数据库中的数据,可以使用new BeanListHandler<>(所映射的实体类.class),这样得到的数据,不知道表的字段名字,我们在往数据库里添加时,需要自己来挨个写字段,非常麻烦!

于是,小编想到通过MapListHandler(),结果集为一个List<Map<String, Object>>,map中key为数据库字段名字,value为对应的值,这样就可以实现insert语句动态拼接了!!


步入正题:

直接展示代码

Connection con = null;
Statement sta = null;
try {
   //1.注册驱动==》告诉指挥部有哪些造桥人可以调遣
   Class.forName("com.mysql.cj.jdbc.Driver");
   //这里是mysql为例   oracle的url ---"jdbc:oracle:thin:@localhost:1521:orcl"
   String url = "jdbc:mysql://127.0.0.1:3306/test_1.0";
   String user = "root";
   String pwd =  "root";
   //2.获得链接==》指挥部根据传入类型 调遣不同的造桥的人造桥
   con = DriverManager.getConnection(url,user,pwd);
   //3.创建Statement对象===》造车
   sta = con.createStatement();
   //4.执行SQL ==》运行SQL 有结果返回
   String sql="select * from user";
   //第五步处理结果还可以引入Dbutils工具包来解析结果
   QueryRunner queryRunner = new QueryRunner();
  //添加map为了key作为表名
   Map<String,List<Map<String, Object>>> mapMap = new HashMap<>();
   List<Map<String, Object>> query = queryRunner.query(con, sql, new MapListHandler());
   mapMap.put("user",query);
   for (Map.Entry<String,List<Map<String, Object>>> mapTop :mapMap.entrySet()) {
       String table = mapTop.getKey();//得到表名
       //便利每个表的数据
       for (Map<String, Object> button : mapTop.getValue()){
           String columnName = "";//表的列名
           String columnValue = "";//表对应的数据值
           //拼接列名
           for (String string :button.keySet()){
               columnName+=string+",";
           }
           if (columnName != null){
               columnName = columnName.substring(0, columnName.length()-1);
           }
           //拼接数据值
           for (Object object : button.values() ){
               if (object != null) {
                   columnValue += "'" + object.toString() + "',";
               }else {//解决查询到的数据为null并且为int类型的
                   columnValue += "null,";
               }
           }
           if (columnValue !=null){
               columnValue = columnValue.substring(0,columnValue.length()-1);
           }
           //组装sql
           String sql1 = "insert into "+ table +" ("+ columnName + ") values ("+ columnValue +")";
           queryRunner.update(con, sql1);
       }
   }
} catch (ClassNotFoundException | SQLException e) {
   e.printStackTrace();
}finally {
   //6.关闭资源
   close(con,sta);
}

总结:

这样就可以实现insert语句的动态添加,不用再一个个的写数据库字段名字和对应的values值了

相关文章
|
19天前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
在9月20日2024云栖大会上,阿里云智能集团副总裁,数据库产品事业部负责人,ACM、CCF、IEEE会士(Fellow)李飞飞发表《从数据到智能:Data+AI驱动的云原生数据库》主题演讲。他表示,数据是生成式AI的核心资产,大模型时代的数据管理系统需具备多模处理和实时分析能力。阿里云瑶池将数据+AI全面融合,构建一站式多模数据管理平台,以数据驱动决策与创新,为用户提供像“搭积木”一样易用、好用、高可用的使用体验。
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
|
21天前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
66 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
19天前
|
关系型数据库 分布式数据库 数据库
云栖大会|从数据到决策:AI时代数据库如何实现高效数据管理?
在2024云栖大会「海量数据的高效存储与管理」专场,阿里云瑶池讲师团携手AMD、FunPlus、太美医疗科技、中石化、平安科技以及小赢科技、迅雷集团的资深技术专家深入分享了阿里云在OLTP方向的最新技术进展和行业最佳实践。
|
27天前
|
人工智能 Cloud Native 容灾
云数据库“再进化”,OB Cloud如何打造云时代的数据底座?
云数据库“再进化”,OB Cloud如何打造云时代的数据底座?
|
1月前
|
SQL 存储 关系型数据库
数据储存数据库管理系统(DBMS)
【10月更文挑战第11天】
90 3
|
1月前
|
SQL 存储 关系型数据库
添加数据到数据库的SQL语句详解与实践技巧
在数据库管理中,添加数据是一个基本操作,它涉及到向表中插入新的记录
|
27天前
|
NoSQL 前端开发 MongoDB
前端的全栈之路Meteor篇(三):运行在浏览器端的NoSQL数据库副本-MiniMongo介绍及其前后端数据实时同步示例
MiniMongo 是 Meteor 框架中的客户端数据库组件,模拟了 MongoDB 的核心功能,允许前端开发者使用类似 MongoDB 的 API 进行数据操作。通过 Meteor 的数据同步机制,MiniMongo 与服务器端的 MongoDB 实现实时数据同步,确保数据一致性,支持发布/订阅模型和响应式数据源,适用于实时聊天、项目管理和协作工具等应用场景。
|
11天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
26 1
|
13天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
29 4
|
20天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
93 1
下一篇
无影云桌面