JAVA 使用原生jdbc批量添加,表被锁住问题

今天用jdbc批量添加数据的时候遇到了一个问题,当数据添加成功过后,再想对该表进行操作发现表被锁住了,检查了下代码发现事务提交了呀!!!!!!!!!!!!

去网上查了大半天的资料才发现问题,在connection  commit过后需要加上 connection.setAutoCommit(true);

下面是示例代码

log.info("插入语句" + sql);
        //获取结果集
        connection = JdbcUtils.getConnection(database.getMysqlDriverName(), database.getMysqlUrl(), database.getMysqlUserName(), database.getMysqlPassWord());
        if (connection != null) {
            //设置为false,事务不会自动提交
            connection.setAutoCommit(false);
            try {
                ps = connection.prepareStatement(sql);
            } catch (Exception e) {
                log.error("--------------------sql语句错误----------------------------");
            }
            try {
                for (int i = 0; i < tsImAnalysisList.size(); i++) {
                    ps.setString(1, tsImAnalysisList.get(i).getSessionNum());
                    ps.setObject(2, tsImAnalysisList.get(i).getCreateTime());
                    ps.setString(3, tsImAnalysisList.get(i).getType());
                    ps.setString(4, tsImAnalysisList.get(i).getSponsorDept());
                    ps.setString(5, tsImAnalysisList.get(i).getFirstLevelDept());
                    ps.setString(6, tsImAnalysisList.get(i).getTwoLevelDept());
                    ps.setString(7, tsImAnalysisList.get(i).getThreeLevelDept());
                    ps.setString(8, tsImAnalysisList.get(i).getSponsorName());
                    ps.setLong(9, tsImAnalysisList.get(i).getSponsorUserId());
                    ps.setLong(10, tsImAnalysisList.get(i).getReplyUserId());
                    ps.setString(11, tsImAnalysisList.get(i).getReplyUserName());
                    ps.setLong(12, tsImAnalysisList.get(i).getFirstResponseTime());
                    ps.setLong(13, tsImAnalysisList.get(i).getTotalDuration());
                    ps.setObject(14, LocalDateTime.now());
                    ps.addBatch();

                }
                //执行批处理
                ps.executeBatch();
                //提交
                connection.commit();
                connection.setAutoCommit(true);
                ps.clearBatch();
                if (ps.executeUpdate() > 0) {
                    return 1;
                }
            } catch (Exception e) {
                //回滚事务
               // connection.rollback();
                log.error("集合数据赋值异常" + e);
            }
            //关闭连接
            //关闭连接
            JdbcUtils.colseResource(connection, ps, rs);

原文地址:https://www.cnblogs.com/fzyang/p/10803627.html

时间: 2024-08-08 15:49:55

JAVA 使用原生jdbc批量添加,表被锁住问题的相关文章

java操作elasticsearch实现批量添加数据(bulk)

java操作elasticsearch实现批量添加主要使用了bulk 代码如下: //bulk批量操作(批量添加) @Test public void test7() throws IOException { //1.指定es集群 cluster.name 是固定的key值,my-application是ES集群的名称 Settings settings = Settings.builder().put("cluster.name", "my-application"

java类型与jdbc类型对应表

  java.sql.Types 值 Java 类型 IBM DB2 Oracle Sybase SQL Informix IBM Content Manager   BIGINT java.lang.long BIGINT NUMBER (38, 0) BIGINT BIGINT INT8 DK_CM_BIGINT   BINARY byte[] CHAR FOR BIT DATA RAW BINARY IMAGE BYTE DK_CM_BLOB   BIT java.lang.Boolean

查询结果一直处于查询状态,表被锁。

执行一条查询语句,结果一直显示的是查询状态,没有出来结果.原来是在执行的一个存储过程里加了事务,但是这个执行存储过程出了错.于是想到,肯定是这个表被锁住了. 接下来就好办了. select   request_session_id   spid,OBJECT_NAME(resource_associated_entity_id) tableName from   sys.dm_tran_locks where resource_type='OBJECT' spid   锁表进程 tableNam

mysql表的锁等待

今天线上业务遇到一个问题,因为一张模拟自增序列的表被锁住,涉及该表的业务受到影响. 线上情况: 1.这个表只有一个id字段. 2.id字段为主键索引 3.该表只有一行数据,记录全局最大id 4.某业务存储过程操作会执行id+1操作,并获取当前id的值,插入到其他相关的表中一行数据 5.存储过程执行完毕,最后会commit 6.事物隔离级别为READ-COMMITTED 7.某业务thread 102336锁住该表,使用show processlist查看,进程102336处于sleep状态 8.

Java 通过JDBC查询数据库表结构(字段名称,类型,长度等)

Java 通过JDBC查询数据库表结构(字段名称,类型,长度等) 发布者:唛唛家的豆子 时间:2012-11-20 17:54:02 在JDBCPreparedStatement.executeQuery().getMetaData();后,我们可以通过ResultSetMetaData对象查询返回结果集的源数据信息,也就是表结构信息. 示例代码如下: package astar.sutil.db; import java.sql.Connection; import java.sql.Driv

hibernate4使用原生jdbc进行批处理

在hibernate中,有一级缓存session和二级缓存sessionFactory这些机制,一方面为编码提供了便利,同时也会有一些副作用.比如有较大的数据量交互的话,缓存反而会降低效率.最近在做一个有关批量更新的程序,在调用session.update()之后,对象会保存在缓存中,如果数据量超过缓存的容量就会出错.解决方法是:在hibernate中调用jdbc批量处理的API,使用原生的jdbc来进行批量操作. 但是这里又出现了新的问题,在hibernate4中,通过session是不能直接

android批量添加联系人

研究生期间就没写过Java代码了,这几天由于想做一个统计网页词频的工具,但是使用C++不是很方便,于是又用Java做了一个小工具.翻开电脑中以前的文件,发现之前还做过一个android中批量添加联系人的工具,瞬间感觉好亲切,也感叹时间过得好快,一眨眼研究生就快要过完了. 记得当初做这个批量添加联系人的工具是刚来读研时,一大堆新同学的手机号码需要添加,班长整理出来同学们的通讯录后就得一个一个输入联系人和号码到手机中,想想这罪可有的受,于是就想能不能让手机直接读取xls格式(Excel格式)的文件到

JAVA数据库编程(JDBC技术)-入门笔记

本菜鸟才介入Java,我现在不急着去看那些基本的语法或者一些Java里面的版本的特征或者是一些晋级的知识,因为有一点.Net的OOP编程思想,所以对于Java的这些语法以及什么的在用到的时候在去发现学习一下.我现在很迫不及待用JAVA想来实现以下对数据库的增删改查.想实现就来看Java是怎么操作数据库的,回想下.Net里你可能会配置web.Config,或者你去写一些DBhelper类然后调用里面的自己定义的一些增删改查的方法,更或者你去配一些数据控件等等往往发现操作基本都是一体化的简单.现在面

用Java操纵HBase数据库(新建表,插入,删除,查找)

java代码如下: package db.insert; /* * 创建一个students表,并进行相关操作 */ import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseCo