反射生成 INSERT 多个对象的 SQL 语句(批量插入)
- + View code
- private static void insertObject(List<?> objectList) throws IllegalAccessException {
- /**
- * 比如:
- * SQL 语句:insert into person(name, age, info) values ('...', '...', '...');
- * 其中 values 改为占位符:
- * SQL 语句:insert into person(name, age, info) values (?, ?, ?);
- * 再获取所有的数据值 Object 数组
- * [zhengbin, 21, 要毕业了]
- */
- // 确定占位符的个数(即对象中不为 null 的字段个数)
- int columnNum = 0;
- // 插入数据的列名
- StringBuilder columns = new StringBuilder("(");
- // 填充占位符的值(即对象中不为null的字段的值)
- List<Object> valuesList = new ArrayList<Object>();
- // 如果为空则不执行
- if (CollectionUtil.isEmpty(objectList)) {
- return;
- }
- // 通过 List 中的第一个 Object,确定插入对象的字段
- Object object = objectList.get(0);
- Class clazz = object.getClass();
- Field[] fields = clazz.getDeclaredFields();
- for (Field field : fields) {
- field.setAccessible(true);
- if (field.get(object) != null) {
- columnNum++;
- columns.append(field.getName()).append(", ");
- valuesList.add(field.get(object));
- }
- }
- columns.replace(columns.lastIndexOf(", "), columns.length(), ")");
- // 获取所有的值
- for (int i = 1; i < objectList.size(); i++) {
- for (Field field : fields) {
- field.setAccessible(true);
- if (field.get(objectList.get(i)) != null) {
- valuesList.add(field.get(objectList.get(i)));
- }
- }
- }
- // 确定一个 Object 的占位符 '?'
- StringBuilder zhanweifuColumn = new StringBuilder("(");
- for (int i = 0; i < columnNum; i++) {
- zhanweifuColumn.append("?, ");
- }
- zhanweifuColumn.replace(zhanweifuColumn.lastIndexOf(", "), zhanweifuColumn.length(), ")");
- // 确定所有的占位符
- int objectNum = objectList.size();
- StringBuilder zhanweifu = new StringBuilder();
- for (int j = 0; j < objectNum; j++) {
- zhanweifu.append(zhanweifuColumn.toString()).append(", ");
- }
- zhanweifu.replace(zhanweifu.lastIndexOf(", "), zhanweifu.length(), "");
- // 生成最终 SQL
- String sql = "INSERT INTO " + object.getClass().getSimpleName().toLowerCase() + " " + columns + " VALUES " + zhanweifu.toString();
- System.out.println(sql);
- System.out.println(valuesList);
- }
反射生成 INSERT 多个对象的 SQL 语句(批量插入)的更多相关文章
- SQL语句-批量插入表(表数据插表)
批量插入表(表数据插表) ****1.INSERT INTO SELECT语句语句形式为:Insert into Table2(field1,field2,...) select value1,val ...
- .net Sql语句批量插入数据库数据
#region 使用SqlBulkCopy public static bool ExecuteTransactionScopeInsert(DataTable dt, int batchSize) ...
- C#与数据库访问技术总结(六)之Command对象创建SQl语句代码示例
Command对象创建SQl语句代码示例 说明:前面介绍了 Command 对象的方法和一些属性,回顾一下 Command对象主要用来执行SQL语句.利用Command对象,可以查询数据和修改数据. ...
- statement 对象执行sql语句
statement对象执行sql语句 关于Statement.它是Java执行数据库操作的一个重要步骤,可以执行一些简单的SQL语句,从而完成对数据库的操作.它有两个子接口,分别是Prepare ...
- SQL SERVER 使用BULK Insert将txt文件中的数据批量插入表中(1)
1/首先建立数据表 CREATE TABLE BasicMsg( RecvTime FLOAT NOT NULL , --接收时间,不存在时间相同的数据 AA INT NOT NULL, --24位地 ...
- SQL 2005批量插入数据的二种方法
SQL 2005批量插入数据的二种方法 Posted on 2010-07-22 18:13 moss_tan_jun 阅读(2635) 评论(2) 编辑 收藏 在SQL Server 中插入一条数据 ...
- 一条insert语句批量插入多条记录
一条insert语句批量插入多条记录 常见的insert语句,向数据库中,一条语句只能插入一条数据: insert into persons (id_p, lastname , firstName, ...
- statement对象与sql语句(新手)
本篇介绍读上篇代码中的疑惑点 实现简单网页上对数据内容进行增删改查,需要用到三个部分:jsp网页前端部分+java后台程序+数据库表 一.创建一个Statement (用于在已经建立数据库连接的基础上 ...
- SQL Server 批量插入数据方案 SqlBulkCopy 的简单封装,让批量插入更方便
一.Sql Server插入方案介绍 关于 SqlServer 批量插入的方式,有三种比较常用的插入方式,Insert.BatchInsert.SqlBulkCopy,下面我们对比以下三种方案的速度 ...
随机推荐
- Redis 超时排查
突然收到告警,提示redis挂了,同时大群也在说某某redis连接超时了,过了一会儿就恢复了.这时登上服务器,查看监控.首先看看qps: 可以看到qps并不高,但是中间有段时间没取到数据是怎么回事?那 ...
- SpringBoot(9) SpringBoot整合Mybaties
一.近几年常用的访问数据库的方式和优缺点 1.原始java访问数据库 开发流程麻烦 <1>注册驱动/加载驱动 Class.forName("com.mysql.jdbc.Driv ...
- Java设计模式学习记录-备忘录模式
前言 这次要介绍的是备忘录模式,也是行为模式的一种 .现在人们的智能手机上都会有备忘录这样一个功能,大家也都会用,就是为了记住某件事情,防止以后自己忘记了.那么备忘录模式又是什么样子的呢?是不是和手机 ...
- centos7安装kafka_2.11
1.下载 官网地址:http://kafka.apache.org/downloads.html 下载:wget https://www.apache.org/dyn/closer.cgi?path= ...
- 业务开发(一)—— MySQL
0x01.SQL异常Incorrect string value java.sql.SQLException: Incorrect string value: '\xE6\x88\x91\xE7\x9 ...
- 【转载】在Centos系统上采用二进制文件部署Node.js环境
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,用来方便地搭建快速的易于扩展的网络应用.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又 ...
- Elasticsearch系列(1):认识Elasticsearch
官方定义 Elasticsearch 是一个实时的分布式搜索分析引擎, 它能让你以一个之前从未有过的速度和规模,去探索你的数据. 它被用作全文检索.结构化搜索.分析以及这三个功能的组合. Elasti ...
- Html5、css、JavaScript基础
一.HTML学习 HTML样式Css 内联样式- 在HTML元素中使用"style" 属性 内部样式表 -在HTML文档头部 <head> 区域使用<style& ...
- 向后台提交数据:通过form表单提交数据需刷新网页 但通过Ajax提交数据不用刷新网页可通过原生态Ajax或jqueryAjax。Ajax代码部分
原生态Ajax提交表单:需要借助XMLHttpRequest对象的open,要收通过post发送请求还要setRequsetHeader,然后把数据发送给后端,代码如下 目录结构 index.py代码 ...
- Javascript URI 解析介绍
URI 在维基百科中对于URI的解释是这样子的: 在计算机术语中,统一资源标识符(Uniform Resource Identifier,或URI)是一个用于标识某一互联网资源名称的字符串. 该种标识 ...