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

posted @   小王基地博客  阅读(200)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示