使用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值了

相关文章
|
1天前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
12 2
国产数据实战之docker部署MyWebSQL数据库管理工具
|
6天前
|
人工智能 Cloud Native 容灾
云数据库“再进化”,OB Cloud如何打造云时代的数据底座?
云数据库“再进化”,OB Cloud如何打造云时代的数据底座?
|
14天前
|
SQL 存储 关系型数据库
数据储存数据库管理系统(DBMS)
【10月更文挑战第11天】
47 3
|
19天前
|
SQL 存储 关系型数据库
添加数据到数据库的SQL语句详解与实践技巧
在数据库管理中,添加数据是一个基本操作,它涉及到向表中插入新的记录
|
22天前
|
SQL 监控 数据处理
SQL数据库数据修改操作详解
数据库是现代信息系统的重要组成部分,其中SQL(StructuredQueryLanguage)是管理和处理数据库的重要工具之一。在日常的业务运营过程中,数据的准确性和及时性对企业来说至关重要,这就需要掌握如何在数据库中正确地进行数据修改操作。本文将详细介绍在SQL数据库中如何修改数据,帮助读者更好
109 4
|
24天前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
阿里云瑶池在2024云栖大会上重磅发布由Data+AI驱动的多模数据管理平台DMS:OneMeta+OneOps,通过统一、开放、多模的元数据服务实现跨环境、跨引擎、跨实例的统一治理,可支持高达40+种数据源,实现自建、他云数据源的无缝对接,助力业务决策效率提升10倍。
|
7天前
|
NoSQL 前端开发 MongoDB
前端的全栈之路Meteor篇(三):运行在浏览器端的NoSQL数据库副本-MiniMongo介绍及其前后端数据实时同步示例
MiniMongo 是 Meteor 框架中的客户端数据库组件,模拟了 MongoDB 的核心功能,允许前端开发者使用类似 MongoDB 的 API 进行数据操作。通过 Meteor 的数据同步机制,MiniMongo 与服务器端的 MongoDB 实现实时数据同步,确保数据一致性,支持发布/订阅模型和响应式数据源,适用于实时聊天、项目管理和协作工具等应用场景。
|
16天前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
50 3
Mysql(4)—数据库索引
|
1天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
14 2
|
4天前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
19 4