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

相关文章
|
存储 JSON 关系型数据库
【干货满满】解密 API 数据解析:从 JSON 到数据库存储的完整流程
本文详解电商API开发中JSON数据解析与数据库存储的全流程,涵盖数据提取、清洗、转换及优化策略,结合Python实战代码与主流数据库方案,助开发者构建高效、可靠的数据处理管道。
|
存储 数据管理 数据库
数据字典是什么?和数据库、数据仓库有什么关系?
在数据处理中,你是否常困惑于字段含义、指标计算或数据来源?数据字典正是解答这些问题的关键工具,它清晰定义数据的名称、类型、来源、计算方式等,服务于开发者、分析师和数据管理者。本文详解数据字典的定义、组成及其与数据库、数据仓库的关系,助你夯实数据基础。
数据字典是什么?和数据库、数据仓库有什么关系?
|
12月前
|
数据采集 关系型数据库 MySQL
python爬取数据存入数据库
Python爬虫结合Scrapy与SQLAlchemy,实现高效数据采集并存入MySQL/PostgreSQL/SQLite。通过ORM映射、连接池优化与批量提交,支持百万级数据高速写入,具备良好的可扩展性与稳定性。
|
人工智能 Java 关系型数据库
使用数据连接池进行数据库操作
使用数据连接池进行数据库操作
292 11
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL数据库的WAL日志与数据写入的过程
PostgreSQL中的WAL(预写日志)是保证数据完整性的关键技术。在数据修改前,系统会先将日志写入WAL,确保宕机时可通过日志恢复数据。它减少了磁盘I/O,提升了性能,并支持手动切换日志文件。WAL文件默认存储在pg_wal目录下,采用16进制命名规则。此外,PostgreSQL提供pg_waldump工具解析日志内容。
1158 0
|
存储 SQL Java
数据存储使用文件还是数据库,哪个更合适?
数据库和文件系统各有优劣:数据库读写性能较低、结构 rigid,但具备计算能力和数据一致性保障;文件系统灵活易管理、读写高效,但缺乏计算能力且无法保证一致性。针对仅需高效存储与灵活管理的场景,文件系统更优,但其计算短板可通过开源工具 SPL(Structured Process Language)弥补。SPL 提供独立计算语法及高性能文件格式(如集文件、组表),支持复杂计算与多源混合查询,甚至可替代数据仓库。此外,SPL 易集成、支持热切换,大幅提升开发运维效率,是后数据库时代文件存储的理想补充方案。
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
677 158
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1799 152