-
ssi批量增加java.sql.SQLException: Connection is closed.
2012-04-10 09:17:07ssi集成,在批量增加数据的时候一定要自己控制事务的开启,否则你批量增加就没有效果,但就是在批量增加结束,立即执行另外一条sql语句时就会报错!后来度娘无果,谷歌也不给力,发现自己在结束操作的时候没有结束事务导致...ssi集成,在批量增加数据的时候一定要自己控制事务的开启,否则你批量增加就没有效果,但就是在批量增加结束,立即执行另外一条sql语句时就会报错!后来度娘无果,谷歌也不给力,发现自己在结束操作的时候没有结束事务导致这个异常!
int result=0; sqlMapClient.startTransaction(); sqlMapClient.startBatch(); for(int i=0;i<reportDayItemsList.size();i++){ ReportDayItemsVO reportDayItems=reportDayItemsList.get(i); sqlMapClient.insert("day.insertDayReportItem",reportDayItems); } result=sqlMapClient.executeBatch(); sqlMapClient.commitTransaction(); sqlMapClient.endTransaction(); return result;
-
oracle 批量增加数据sql
2020-04-23 23:42:49<insert id="insertBatch" parameterType="java.util.List"> insert into A10WEB ( ABZ001, ABZ080, AAC102, ABB391, AAB001 ) select t.abz001,t.abz080,t.aac102,t.a...<insert id="insertBatch" parameterType="java.util.List">
insert into A10WEB (
ABZ001, ABZ080, AAC102, ABB391, AAB001
)
select
t.abz001,t.abz080,t.aac102,t.abb391,t.aab001
from (
<foreach collection="list" item="item" index="index"
separator="union all">
(select
#{item.abz001} abz001,
#{item.abz080} abz080,
#{item.aac102} aac102,
#{item.abb391} abb391,
#{item.aab001} aab001
from
dual)
</foreach>
)t
</insert> -
java map insert sql_oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert...
2021-03-08 17:44:53最近做项目遇到一个挺纠结的问题,由于业务的关系,DB的数据表无法确定,在使用过程中字段可能会增加,这样在insert时给我造成了很大的困扰。先来看一下最终我是怎么实现的:INSERT INTO tg_fcst_lines(${lineColumn...最近做项目遇到一个挺纠结的问题,由于业务的关系,DB的数据表无法确定,在使用过程中字段可能会增加,这样在insert时给我造成了很大的困扰。
先来看一下最终我是怎么实现的:
INSERT INTO tg_fcst_lines(${lineColumn})
select result.*,sq_fcst_lines.nextval from(
]]>
(select
#{_value}
from dual)
由于数据表不确定,所以我无法确定我要insert的字段,由于是批量insert,确定value值也挺费劲。
我传给mybatis的参数是一个map:
Map insertMap = new HashMap();
insertMap.put("lineColumn",lineColumn);
insertMap.put("lineList", lineList);
lineColumn是一个字符串,lineList是一个list:
List lineList = new ArrayList();
lineList里存放的是map,map的键对应数据表的字段,值是你要insert的值,这样就可以通过foreach取出list的值作为insert语句的value,但由于map是无序的,存放的顺序和
遍历时取值的顺序不一定一致,所以为了确保insert字段和值可以一一对应,可以通过遍历一次map来取出key拼接一个字符串作为insert的字段
String lineColumn = ""; //拼接的SQL,作为insert语句的一部分
[java] view plaincopy
Map lineMap = lineList.get(0);
for (String key : lineMap.keySet()) {
lineColumn +=key+",";
}
lineColumn +="LINE_ID";
这里的line)id是一个自增的字段,在语句中直接写序列会报错,所以先遍历list将取出的值作为result,在取出result的所有值,连同序列一起作为insert的值。
在取值的时候使用两个foreace嵌套来实现,外层的foreach遍历list,里层的foreach遍历map。
以上内容是本文给大家介绍的oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert的全部叙述,希望大家喜欢。
原文:http://www.jb51.net/article/74203.htm
-
java的增、删、改、查与及批量增加
2016-01-02 14:12:49其中涉及的数据库的连接与关闭,Statement的关闭,ResultSet的关闭,请参考文章...宿舍室表sql: CREATE TABLE dorm(dormnum INT NOT NULL PRIMARY KEY,dormtext TEXT NOT其中涉及的数据库的连接与关闭,Statement的关闭,ResultSet的关闭,请参考文章http://blog.csdn.net/mrw456/article/details/49718235
本例使用Mysql数据库,以宿舍室表为例
宿舍室表sql:
CREATE TABLE dorm(dormnum INT NOT NULL PRIMARY KEY,dormtext TEXT NOT NULL);
Dorm.java
public class Dorm { private int dormnum; private String dormtext; public Dorm() { super(); } public Dorm(int dormnum, String dormtext) { super(); this.dormnum = dormnum; this.dormtext = dormtext; } public int getDormnum() { return dormnum; } public void setDormnum(int dormnum) { this.dormnum = dormnum; } public String getDormtext() { return dormtext; } public void setDormtext(String dormtext) { this.dormtext = dormtext; } }
1、增加数据
2、删除数据public boolean dormadd(Dorm dorm) { Connection connection=MysqlOperation.getConnection(); String addSQL="insert into dorm(dormnum,"+ "dormtext) values(?,?)"; PreparedStatement pstmt=null; try { connection.setAutoCommit(false); //设置自动提交为false,如果出现异常进行回滚 pstmt=connection.prepareStatement(addSQL); pstmt.setInt(1,dorm.getDormnum()); pstmt.setString(2,dorm.getDormtext()); pstmt.execute(); connection.commit(); } catch (Exception e) { try { connection.rollback();//事务进行回滚,回到最初的状态 } catch (SQLException e1) { System.out.println("事务提交异常"); } e.printStackTrace(); return false; }finally{ MysqlOperation.close(pstmt); MysqlOperation.close(connection); } return true; }
3、修改数据public boolean dormdelete(String dormnum) { Connection connection=MysqlOperation.getConnection(); String sql="delete from dorm where dormnum=?"; PreparedStatement pstmt=null; try { connection.setAutoCommit(false); pstmt=connection.prepareStatement(sql); pstmt.setString(1,dormnum); pstmt.execute(); connection.commit(); } catch (Exception e) { e.printStackTrace(); try { connection.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } return false; }finally{ MysqlOperation.close(pstmt); MysqlOperation.close(connection); } return true; }
4、查询数据public boolean dormupdate(Dorm dori) { Connection connection=MysqlOperation.getConnection(); String sql="update dorm set dormtext=? where dormnum=?"; PreparedStatement pstmt=null; try { connection.setAutoCommit(false); pstmt=connection.prepareStatement(sql); pstmt.setString(1,dori.getDormtext()); pstmt.setInt(2,dori.getDormnum()); pstmt.execute(); connection.commit(); } catch (Exception e) { e.printStackTrace(); try { connection.rollback(); } catch (SQLException e1) { System.out.println("事务异常"); } return false; }finally{ MysqlOperation.close(pstmt); MysqlOperation.close(connection); } return true; }
5、批量添加public List<Dorm> buildselect(String str) { Connection connection=MysqlOperation.getConnection(); String findSQL="select * from dorm where dormnum=?"; PreparedStatement pstmt=null; ResultSet rs=null; List<Dorm> dorms=new ArrayList<Dorm>(); try { pstmt=connection.prepareStatement(findSQL); pstmt.setString(1,str); rs=pstmt.executeQuery(); while(rs.next()) { Dorm dorm=new Dorm(); dorm.setDormnum(rs.getInt(1)); dorm.setDormtext(rs.getString(2)); dorms.add(dorm); } } catch (SQLException e) { e.printStackTrace(); return null; }finally { MysqlOperation.close(rs); MysqlOperation.close(pstmt); MysqlOperation.close(connection); } return dorms; }
public boolean dormpadd(ArrayList<Dorm> dorms) { Connection connection=MysqlOperation.getConnection(); String addSQL="insert into dorm(dormnum,"+ "dormtext) values(?,?)"; PreparedStatement pstmt=null; try { connection.setAutoCommit(false); pstmt=connection.prepareStatement(addSQL); for(Dorm dorm:dorms){ pstmt.setInt(1,dorm.getDormnum()); pstmt.setString(2,dorm.getDormtext()); pstmt.addBatch(); //添加预定义参数 } pstmt.executeBatch();//批量执行预定义SQL connection.commit(); } catch (Exception e) { try { connection.rollback(); } catch (SQLException e1) { System.out.println("事务提交异常"); } e.printStackTrace(); return false; }finally{ MysqlOperation.close(pstmt); MysqlOperation.close(connection); } return true; }
-
JDBC批量增加批量修改增删改查工具类
2019-09-17 15:31:29JDBC工具类 package ... import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet;...import java.sql.ResultSetMetaData;...import java.sql.SQLExcept... -
psqlgres批量增加删除数据
2013-05-15 14:30:03批量增加数据脚本add_batch.sql [code="java"]create function add_account(INTEGER) returns TEXT as ' DECLARE num INTEGER := 1; input_num ALIAS FOR $1; number INTEGER := 0; BEGIN ... -
java队列批量_java实现分布式系统mysql的批量更新,数据先放队列中然后批量入库...
2021-03-13 02:01:06在线QQ客服:1922638专业的SQL Server、MySQL数据库同步软件背景在项目中开发一批新的和更新的需求。由于以前的数据是一个接一个地存储的,因此每天的存储量约为100,000。后来,当需求增加的日存储量增加到一百万时... -
Mybatis动态SQL批量更新
2020-09-18 09:30:37Mybatis动态SQL批量更新 需求: 现有一个数据同步的需求,是将两张存在一对多关系表的数据进行同步,多方保存有产品编号和产品类型名称,而一方则保留有产品编号和其他数据,现要将多方的产品名称拼接成一个字符串,... -
Mybatis批量增加,删除,更新Oracle
2018-07-18 17:45:34最近需要用到Mybatis批量新增oracle数据库,刚开始在网上找到的方法是都是更新mySQL的,试了一下发现不适合Oracle,后来发现正确的oracle批量新增的sql是: <insert id="insertAttractionsBatch" ... -
Mybatis批量增加,删除,更新Oracle
2016-09-09 17:35:04最近需要用到Mybatis批量新增oracle数据库,刚开始在网上找到的方法是都是更新mySQL的,试了一下发现不适合Oracle,后来发现正确的oracle批量新增的sql是: <insert id="insertAttractionsBatch" ... -
Java之JDBC-批量操作
2018-04-10 20:08:511.增加插入1000条数据,查看各种方法所需要的时间:*普通方式:...import java.sql.*; /** * @Author: cxx * @Date: 2018/4/10 18:22 */ public class JdbcTest { public static void main(String[] args) { ... -
mysql的批量增、删、改、查sql的语句
2018-12-21 14:49:131.批量增加: <insert id="addSelfTaskList" parameterType="java.util.List"> insert into selftaskpatroluser(taskid,taskassetid) VALUES <... -
Java书签 #MyBatis之批量插入并返回自增主键id
2020-10-16 10:30:27通过 mybatis 框架,实现 SQL 批量插入并返回每条数据的主键id。 2.山重水复 通过使用 MyBatis,在插入单条数据的时候有两种方式返回自增主键id: 对于支持生成自增主键的数据库:<insert> 标签属性... -
Java高级教程之ElasticSearch-10:ElasticSearch使用sql查询
2020-07-07 21:29:51首先增加一些初始化数据,使用_bulk批量创建索引library,类型定义为book,包含的字段有name,author,release_date,page_count四个。这里还为index创建了_id命名。 curl -X PUT "localhost:9200/library/book/_... -
oracle jdbc批量插入数据库 不存在增加 存在则更新
2018-03-20 16:37:47以下就是一个实例:package ... import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; ...import javax.sql.DataSource;...import java.sql.*; import ja... -
Mybatis动态SQL
2020-07-30 00:16:08choose(when otherwise) 相当于JAVA中的if else trim(where , set ) 辅助元素 用来处理sql拼接问题 foreach 循环语句 批量操作 bind 创建一个变量 并绑定到上下中 用于兼容不用的数据库,防止SQL注入等 choose 举例 ... -
mybatis批量添加踩坑
2021-01-19 19:14:08// 批量增加房源图片(效率高,但是参数不灵活) int batchInsertSelective(List<HousePic> list); <insert id="batchInsertSelective" parameterType="java.util.List"> INSERT INTO house_pic ... -
[MyBatis]动态sql
2018-07-18 22:55:03目录 ...批量增加 内置参数 bind标签 sql标签 所有测试用例 所有接口 package com.yiki.Dao; import com.yiki.Entity.Person; import org.apache.ibatis.annotations.Param; import java... -
Java面试题--5
2019-05-29 20:08:28PreparedStatement接口代表预编译的语句,它主要的优势在于可以减少SQL的编译错误并增加SQL的安全性(减少SQL注入攻击的可能性) PreparedStatement中的SQL语句是可以带参数的,避免了用字符串连接拼接SQL语句的麻烦... -
mybatis之批量添加
2018-10-12 19:06:272)增加映射接口批量添加方法: 3)sql.xml增加insertBatch片段 <insert id="insertBatch" parameterType="java.util.List" > insert into tb_specification_option (id, ... -
java开源包1
2013-06-28 09:14:34Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP... -
java开源包12
2013-06-28 10:14:45Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP... -
Java资源包01
2016-08-31 09:16:25Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP... -
SOFABoot :SOFABoot 基于 Spring Boot ,不过在其基础上增加了 Readiness Check,类隔离,日志空间隔离等等能力。 配套提供的还有:SOFARPC(RPC框架)、SOFABolt(基于Netty的远程通信框架)、SOFARegistry(注册...
-
java开源包101
2016-07-13 10:11:08Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP... -
java开源包11
2013-06-28 10:10:38Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP... -
java开源包6
2013-06-28 09:48:32Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP... -
java开源包10
2013-06-28 10:06:40Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP...