前言:

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

Q.E.D.