使用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值了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了