精华内容
下载资源
问答
  • JAVA批量插入数据操作+事务提交
    2021-03-08 00:15:59

    packagecom.eg.egsc.egc.mapanalysisapp;importjava.sql.Connection;importjava.sql.Date;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.SQLException;importjava.util.Random;/*** 批量操作+事务提交

    **/

    public classJdbcBatchInsertData {private static String url = "jdbc:postgresql://10.102.73.53:5432/test_db?rewriteBatchedStatements=true&characterEncoding=utf8&serverTimezone=GMT%2B8";private static String user = "test";private static String password = "test";public static voidmain(String[] args) {

    Connection conn= null;

    PreparedStatement pstm= null;try{

    Class.forName("org.postgresql.Driver");

    conn=DriverManager.getConnection(url, user, password);

    String sql= "INSERT INTO test_poi (id, park_id, project_id, longitude, latitude, type,"

    + " project_short_desc, project_desc, tag_ids, version,"

    + " pic_url, play_time, show_levels, play_number, wait_number,"

    + " create_user, create_time, update_user, update_time, delete_flag) "

    + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,? , ?, ?, ?, ?, ?, ?, ?)";

    pstm=conn.prepareStatement(sql);//先将命令的提交方式设为false,即手动提交conn.setAutoCommit(false);//最后在所有命令执行完之后再提交事务conn.commit();

    conn.setAutoCommit(false);

    Long startTime=System.currentTimeMillis();

    Random rand= newRandom();//int a, b;//插入10万条数据

    for (int i = 1; i <= 100000; i++) {//随机值//a = rand.nextInt(10);//b = rand.nextInt(10);//1代表的是列索引,i是值

    pstm.setString(1, i + "");

    pstm.setString(2, i + "");//园区ID

    pstm.setString(3, i + ""); //项目ID

    pstm.setString(4, "109.18" + i); //经度

    pstm.setString(5, "19.6" + i); //纬度

    pstm.setInt(6, 1);//type

    pstm.setString(7, "童话世界" +i);

    pstm.setString(8, "这里是童话世界" +i);

    pstm.setString(9, "1|2");//tag_id

    pstm.setInt(10, 1); //版本

    pstm.setString(11, "picUrl");//picUrl

    pstm.setInt(12, 4);//play_time

    pstm.setString(13, "3|5"); //show_levels

    pstm.setInt(14, 0);//play_number

    pstm.setInt(15, 0);//wait_number//Timestamp createDate = new Timestamp(System.currentTimeMillis());//pstm.setTimestamp(16,createDate);//us_start_time//pstm.setTimestamp(17, createDate);//us_end_time

    pstm.setString(16, "admin");//create_user

    pstm.setDate(17, new Date(i));//create_time

    pstm.setString(18, "admin");//update_user

    pstm.setDate(19, new Date(i));//update_time

    pstm.setInt(20, 1);//delete_flag

    pstm.addBatch();

    }

    pstm.executeBatch();//此处再commit

    conn.commit();

    Long endTime=System.currentTimeMillis();

    System.out.println("************************正在插入中,请稍等******************************");

    System.out

    .println("批量插入用时:" + ((endTime - startTime)) + "毫秒" + "约等于" + ((endTime - startTime) / 1000) + "秒");

    System.out.println("批量插入完成!");

    }catch(ClassNotFoundException e) {

    e.printStackTrace();

    }catch(SQLException e) {

    e.printStackTrace();throw newRuntimeException(e);

    }finally{if (pstm != null) {try{

    pstm.close();

    }catch(SQLException e) {

    e.printStackTrace();throw newRuntimeException(e);

    }

    }if (conn != null) {try{

    conn.close();

    }catch(SQLException e) {

    e.printStackTrace();throw newRuntimeException(e);

    }

    }

    }

    }

    }

    更多相关内容
  • java事务批量提交

    2021-03-08 00:15:56
    Statement批量处理和事务代码如下:package com.ambow.day20.jdbc.JDBCTestCommitAndRollback;import java.sql.Connection;import java.sql.SQLException;import java.sql.Statement;import ...

    Statement批量处理和事务代码如下:

    package com.ambow.day20.jdbc.JDBCTestCommitAndRollback;

    import java.sql.Connection;

    import java.sql.SQLException;

    import java.sql.Statement;

    import com.ambow.day19.jdbc.util.JDBCConAndClo;

    /*

    *1,首先把Auto commit设置为false,不让它自动提交

    *2,进行手动提交(commit)

    *3,提交完成后回复现场将Auto commit,还原为true,

    *4,当异常发生执行catch中SQLException时,记得要rollback(回滚);

    * */

    public class StatementCommitAndRollbackTest {

    public static void main(String args[]) {

    Connection con = null;

    Statement stm = null;

    try {

    con = JDBCConAndClo.getConnectionBao();

    stm = con.createStatement();

    con.setAutoCommit(false);

    // 若不出现异常,则继续执行到try语句完,否则跳转到catch语句中

    stm.addBatch("insert into student values(23,'tangbao','高数',100)");

    stm.addBatch("insert into student values(24,'王定','c#',98)");

    stm.addBatch("insert into student values(25,'王国云','java',90)");

    stm.addBatch("insert into student values(26,'溜出','英语',89)");

    stm.addBatch("insert into student values(27,'wqde','java',63)");

    /*

    * int[] executeBatch() throws

    * SQLException将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。

    */

    stm.executeBatch();

    System.out.println("插入成功!");

    // commit:若成功执行完所有的插入操作,则正常结束

    con.commit();

    System.out.println("提交成功!");

    con.setAutoCommit(true);

    } catch (SQLException e) {

    e.printStackTrace();

    try {

    //rollback: 若出现异常,对数据库中所有已完成的操作全部撤销,则回滚到事务开始状态

    if (!con.isClosed()) {

    con.rollback();

    System.out.println("提交失败,回滚!");

    con.setAutoCommit(true);

    }

    } catch (SQLException e1) {

    e1.printStackTrace();

    } finally {

    JDBCConAndClo.closeStatement(stm);

    JDBCConAndClo.closeConnection(con);

    }

    }

    }

    }

    PreparedStatement批量处理和事务代码如下:

    package com.ambow.day20.jdbc.JDBCTestCommitAndRollback;

    import java.sql.Connection;

    import java.sql.PreparedStatement;

    import java.sql.SQLException;

    import com.ambow.day19.jdbc.util.JDBCConAndClo;

    /*

    * PreparedStatement:

    1.addBatch() 将一组参数添加到 PreparedStatement对象内部

    2.executeBatch() 将一批参数提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。

    *

    */

    public class PreparedStatementCommitAndRollbackTest {

    public static void main(String args[]) {

    Connection con = null;

    PreparedStatement pstm = null;

    try {

    // 1. 建立与数据库的连接

    con = JDBCConAndClo.getConnectionBao();

    // 2. 执行sql语句

    // 1).先创建PreparedStatement语句(发送slq请求):

    pstm = con.prepareStatement("insert into student values(?,?,?,?)");

    con.setAutoCommit(false);//1,首先把Auto commit设置为false,不让它自动提交

    // 2) 设置sql语句1

    pstm.setInt(1, 33);

    pstm.setString(2,"wangqin");

    pstm.setString(3, "c++");

    pstm.setDouble(4, 78.5);

    // 3) 将一组参数添加到此 PreparedStatement 对象的批处理命令中。

    pstm.addBatch();

    // 2) 设置sql语句2

    pstm.setInt(1, 34);

    pstm.setString(2,"wuytun");

    pstm.setString(3, "c");

    pstm.setDouble(4, 77);

    // 3) 将一组参数添加到此 PreparedStatement 对象的批处理命令中。

    pstm.addBatch();

    // 2) 设置sql语句3

    pstm.setInt(1, 31);

    pstm.setString(2,"tetet");

    pstm.setString(3, "c++");

    pstm.setDouble(4, 90);

    // 3) 将一组参数添加到此 PreparedStatement 对象的批处理命令中。

    pstm.addBatch();

    // 2) 设置sql语句4

    pstm.setInt(1, 32);

    pstm.setString(2,"liug");

    pstm.setString(3, "c");

    pstm.setDouble(4, 50);

    // 3) 将一组参数添加到此 PreparedStatement 对象的批处理命令中。

    pstm.addBatch();

    // 4) 将一批参数提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。

    pstm.executeBatch();

    System.out.println("插入成功!");

    // 若成功执行完所有的插入操作,则正常结束

    con.commit();//2,进行手动提交(commit)

    System.out.println("提交成功!");

    con.setAutoCommit(true);//3,提交完成后回复现场将Auto commit,还原为true,

    } catch (SQLException e) {

    e.printStackTrace();

    try {

    // 若出现异常,对数据库中所有已完成的操作全部撤销,则回滚到事务开始状态

    if(!con.isClosed()){

    con.rollback();//4,当异常发生执行catch中SQLException时,记得要rollback(回滚);

    System.out.println("插入失败,回滚!");

    con.setAutoCommit(true);

    }

    } catch (SQLException e1) {

    e1.printStackTrace();

    }

    }finally{

    JDBCConAndClo.closePreparedStatement(pstm);

    JDBCConAndClo.closeConnection(con);

    }

    }

    }

    展开全文
  • 1.数据库配置文件mybatis-config-only.xml 2.Java工具类MybatisUtil public class MybatisUtil { public static SqlSession getSqlSession(){ //加载配置文件 //String resource = ResourceUtils.getFile("classpath...

    1.数据库配置文件mybatis-config-only.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <!--先加载基础配置文件 主要是数据库参数-->
        <!--<properties resource="application.properties"/>-->
        <!--设置-->
        <settings>
            <!-- 全局映射器启用缓存 默认为false -->
            <setting name="cacheEnabled" value="true"/>
            <!-- 查询时,关闭关联对象即时加载以提高性能 -->
            <setting name="lazyLoadingEnabled" value="true"/>
            <!-- 设置关联对象加载的形态,此处为按需加载字段(加载字段由SQL指定),不会加载关联表的所有字段,以提高性能 -->
            <setting name="aggressiveLazyLoading" value="false"/>
            <!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 -->
            <setting name="multipleResultSetsEnabled" value="true"/>
            <!-- 允许使用列标签代替列名 -->
            <setting name="useColumnLabel" value="true"/>
            <!-- 允许使用自定义的主键值(比如由程序生成的UUID 32位编码作为键值),数据表的PK生成策略将被覆盖 -->
            <setting name="useGeneratedKeys" value="true"/>
            <!-- 给予被嵌套的resultMap以字段-属性的映射支持 -->
            <setting name="autoMappingBehavior" value="FULL"/>
            <!-- 对于批量更新操作缓存SQL以提高性能  但是返回id有问题-->
            <setting name="defaultExecutorType" value="SIMPLE"/>
            <!-- 数据库超过36000秒仍未响应则超时 -->
            <setting name="defaultStatementTimeout" value="36000"/>
            <!-- 日志使用logback实现 -->
            <!--<setting name="logPrefix" value="mybatis-log."/>-->
            <!--是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。 -->
            <setting name="mapUnderscoreToCamelCase" value="true"/>
        </settings>
        <environments default="development">
            <environment id="development">
                <!--指定事务管理的类型,这里简单使用Java的JDBC的提交和回滚设置-->
                <transactionManager type="JDBC"/>
                <!--dataSource 指连接源配置,POOLED是JDBC连接对象的数据源连接池的实现-->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://1.1.1.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8"/>
                    <property name="username" value="root"/>
                    <property name="password" value="123456"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <!--指定Mybatis SQL配置文件-->
            <mapper resource="com/produce/core/demo/mapper/xml/TestMapper.xml"/>
        </mappers>
    </configuration>
    

    2.Java工具类MybatisUtil

    public class MybatisUtil {
        public static SqlSession getSqlSession(){
            //加载配置文件
            //String resource = ResourceUtils.getFile("classpath:mybatis-config-only.xml").getPath();
            //将配置文件读入字节流
            SqlSession session = null;
            try (InputStream is = Resources.getResourceAsStream("mybatis-config-only.xml")){
                //构建sqlSession工厂
                SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
                //获取sqlSession
                session = sqlSessionFactory.openSession();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return session;
        }
    }
    

    3.数据库操作

    public void updateEmployeeInfo() {
    	System.out.println("执行开始变更员工基本信息...");
    
    	//获取sqlSession
    	SqlSession session = MybatisUtil.getSqlSession();
    	//Mybatis SQL地址
    	String statement = "com.produce.core.demo.mapper.TestMapper.selectEmployeeList";
    	String statement1 = "com.produce.core.demo.mapper.TestMapper.updateEmployeeInfo";
    
    	try{
    		//查询系统员工号集合
    		List<String> list = session.selectList(statement);
    		for(int i=0;i<list.size();i++){
    			Map map = new HashMap();
    			map.put("empCode",list.get(i));
    			map.put("status","1");
    			//根据员工号,更新员工信息
    			session.update(statement1,map);
    			//每更新一名员工,便手动提交一次事务
    			session.commit(true);
    		}
    	}catch (Exception e){
    		System.out.println("同步员工基本信息异常...");
    		e.printStackTrace();
    	}finally {
    		session.close();
    	}
    
    	System.out.println("执行完毕变更员工基本信息...");
    }
    
    展开全文
  • Connection conn;Statement stat;ResultSet rs;ResultSetMetaData rsmd;...[color=red]/*** 插入数据库(批量)* */[/color]public int addShopInfoList(Listlist){try {//获取表名Properties info = new Pr...

    Connection conn;

    Statement stat;

    ResultSet rs;

    ResultSetMetaData rsmd;

    PreparedStatement pstat;

    [color=red]/**

    * 插入数据库(批量)

    * */[/color]

    public int addShopInfoList(Listlist){

    try {

    //获取表名

    Properties info = new Properties();

    info.load(new FileInputStream(new File("jdbc.properties")));

    String table_name= info.getProperty("table_name");

    System.out.println(table_name);

    long start = System.currentTimeMillis();//开始时间

    conn=JdbcUtil.getConnection();

    conn.setAutoCommit(false);

    String sql ="insert into "+table_name+" " +

    "(shop_name,shop_url,area,phone,address,ev_num,bad_num,score,pt_name,fp," +

    " open_date,city,sales,code,lon,lat,update_zt,img_zz_count,is_yyzz,is_xkz," +

    " is_lhfj,csdj,gldj,jcrq,dwmc,xkzh,fddbr,jydz,ztyt,jyfw," +

    " yxq,fl,img_url)" +

    " values" +

    "(?,?,?,?,?, ?,?,?,?,?," +

    " ?,?,?,?,?, ?,?,?,?,?," +

    " ?,?,?,?,?, ?,?,?,?,?," +

    " ?,?,?)";

    pstat= conn.prepareStatement(sql);

    for (Shop_Info_Model shopInfoModel:list) {//批量添加

    System.err.println(shopInfoModel.getShop_name());

    //Map map=(Map) list.get(i);

    //System.out.println(map);

    pstat.setString(1, shopInfoModel.getShop_name());

    pstat.setString(2, shopInfoModel.getShop_url());

    pstat.setString(3, shopInfoModel.getArea());

    pstat.setString(4, shopInfoModel.getPhone());

    pstat.setString(5, shopInfoModel.getAddress());

    pstat.setString(6, shopInfoModel.getEv_num());

    pstat.setString(7, shopInfoModel.getBad_num());

    pstat.setString(8, shopInfoModel.getScore());

    pstat.setString(9, shopInfoModel.getPt_name());

    pstat.setString(10, shopInfoModel.getFp());

    pstat.setString(11, shopInfoModel.getOpen_date());

    pstat.setString(12, shopInfoModel.getCity());

    pstat.setString(13, shopInfoModel.getSales());

    pstat.setString(14, shopInfoModel.getCode());

    pstat.setString(15, shopInfoModel.getLon());

    pstat.setString(16, shopInfoModel.getLat());

    pstat.setString(17, shopInfoModel.getUpdate_zt());

    pstat.setString(18, shopInfoModel.getImg_zz_count());

    pstat.setString(19, shopInfoModel.getIs_yyzz());

    pstat.setString(20, shopInfoModel.getIs_xkz());

    pstat.setString(21, shopInfoModel.getIs_lhfj());

    pstat.setString(22, shopInfoModel.getCsdj());

    pstat.setString(23, shopInfoModel.getGldj());

    pstat.setString(24, shopInfoModel.getJcrq());

    pstat.setString(25, shopInfoModel.getDwmc());

    pstat.setString(26, shopInfoModel.getXkzh());

    pstat.setString(27, shopInfoModel.getFddbr());

    pstat.setString(28, shopInfoModel.getJydz());

    pstat.setString(29, shopInfoModel.getZtyt());

    pstat.setString(30, shopInfoModel.getJyfw());

    pstat.setString(31, shopInfoModel.getYxq());

    pstat.setString(32, shopInfoModel.getFl());

    pstat.setString(33, shopInfoModel.getImg_url());

    pstat.addBatch();

    }

    pstat.executeBatch(); //批量执行预定义SQL

    conn.commit();//提交事务

    //pstat.close();

    clojdbc(); //关闭连接

    long end = System.currentTimeMillis();

    System.out.println("批量插入需要时间:"+(end - start)); //批量插入需要时间:24675

    return 1;

    } catch (SQLException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    } catch (Exception e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    return 0;

    }

    [color=red]/**

    * 关闭数据库

    * */[/color]

    public void clojdbc() {

    try {

    if (rs != null)

    rs.close();

    if (stat != null)

    stat.close();

    if (conn != null)

    conn.close();

    } catch (SQLException e) {

    e.printStackTrace();

    }

    }

    展开全文
  • 关于SpringMyBatis纯注解事务不能提交的问题分析与解决
  • 很多人在用 MyBatis 或者 通用 Mapper 时,经常会问有没有批量插入和批量更新的方法。实际上许多时候没必要用去实现特别复杂的批量操作。直接通过 MyBatis 的 BATCH 方式执行增删改方法即可。下面是一个批量用法的...
  • 今天需要对mysql做一个批量插入的操作,使用的是原生的jdbc对mysql进行操作,大约插入20几万条数据,刚开始事务是自动提交的,插完数据大约用了4分钟,后来把事务改为手动提交,插完数据用了20秒,时间相缩短了十倍...
  • DAO` protected int[] batchExcute...//手动提交 jdbcTemplate.getDataSource().getConnection().setAutoCommit(true);//还原 如以上处理报错,可以考虑将getConnection()赋给一个conn变量,后续使用conn操作
  • java程序员编写程序的时候,会在数据库中涉及到事务的相关操作,在java中,事务就是指准备要做的或所做的事情,是对数据库进行统一的提交或回滚的操作。下面就来学习一下MySQL事务提交和回滚演示的知识,对MySQL...
  • java事务以及批量更新

    千次阅读 2018-09-11 20:13:13
    java事务以及批量更新 1.概念简介 事务是一步或多部数据库操作序列组成的逻辑单元,这系列操作要么全部执行,要么全部放弃执行。 2.注意 一个事务可以由一组DML组成或者一个DDL语句或者一个DCL语句。...
  • Java多线程数据库事务提交控制

    千次阅读 2021-08-28 20:43:44
    四、为多线程提交添加事务控制 总结 前言 公司业务中遇到一个需求,需要同时修改最多约5万条数据,而且还不支持批量或异步修改操作。循环操作耗时太长,为提高效率我进行了下面这个测试,具体操作如下: 一...
  • Java中开启事务操做数据库

    千次阅读 2021-03-17 19:40:32
    1、事务的四大特性(ACID)html一、原子性(atomicity):组成...数组三、隔离性(isolcation):一个事务处理和另外一个事务处理相互间互不影响;多线程四、持续性(durability):事务处理的效果可以被永久保存下来。并发2...
  • mybatis怎么处理事务问题

    千次阅读 2021-03-13 20:40:01
    } /** * 批量更新 * @param str * @param obj * @return * @throws Exception */ public Object batchSave(String str, List objs){ return sqlSessionTemplate.insert(str, objs); } /** * 修改对象 * @param str ...
  • 目录Spring+Mybatis批量提交(batchUpdate)公共引入:SqlSessionFactory方式一:手动调动并提交方式二:自动调用并提交 提供两种批量提交方式,如有问题,欢迎网友随时指正 公共引入:SqlSessionFactory @Autowired ...
  • Hibernate中Transaction事务批量提交

    万次阅读 2016-05-05 21:32:37
    Hibernate中Transaction事务批量提交
  • 一、事务的四大特性(ACID)1、原子性(atomicity):组成事务的语句形成了一个逻辑单元,不能只执行一部分;2、一致性(consistency):在事务处理执行前后,数据库与理论值是一致的(数据库完整性约束);3、隔离性...
  • 背景:有个数据量很大的列表,需要插入,由于数据量过大,所以分批批量插入,然后这些插入没有关联性,所以使用多线程来执行,提高效率,但是如果其中某一次执行失败,需要整体回滚; 如下是核心代码: //批量插 ...
  • 由于无效数据,有时执行诸如插入,更新或删除之类的数据库操作命令可能会引发异常。为了保护我们的应用程序数据的完整性,我们必须确保在事务失败时必须回退所有已执行的命令,以便它影响数据的...importjava.sql.*...
  • Spring-Java事物回滚失效处理最近在做项目中,无意间发现有个类在抛事物回滚操作,数据也正常的插入到数据库当中了,于是仔细查看看一下具体原因。一切还是要从Java的检查型异常和非检查型异常说起。那么什么是检查...
  • 1 2 3 4 5
  • Java-JDBC-事务与设置回滚点事务能够保证SQL要么全部执行成功,要么全部执行失败JDBC 默认是自动提交事务每条DML都是默认提交事务的,多个preparedStatement.executeUpdate();都会提交一次事务如果想手动控制事务,那么...
  • 批量更新操作批量更新逻辑:底层真正的批量更新(一次请求发送批量更新语句)底层循环发送语句(假批量更新)—本质上就是一条一条更新批量更新逻辑判断JdbcTemplateJdbcUtils.supportsBatchUpdates(ps.getConnection())...
  • 事务场景:需要做一个跑批进行一个流程的实现,0.获取异常数据(多条),for循环对单条数据进行下面三个操作:1).调用别的系统进行查询,2).查询自己的库中数据,3)更改自己数据库中的数据状态。此时就需要对单条...
  • 代码的漏洞 通过1 'or '... } } 手动提交事务 批量删除TRUNCATE:删除磁盘文件,新建一个空表 默认情况下,mysql是不支持批处理,在jdbc批处理参数 打开批处理开关characterEncoding=utf8&useSSL=false&serverTimezone=UTC&...
  • spring+mybatis 手动开启和提交事务

    千次阅读 2017-05-30 10:55:00
    示例java代码  // 保存信息 public MessageTpl saveMessage(Map, Object> mqInfo, Message message) throws Exception{ // 保存信息 //获取Spring容器的对象  ClassPathXmlApplicationContext contextLoader...
  • 一、Java事务 1、通常的观念认为,事务仅与数据库相关。 事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性 (isolation)和持久性(durability)的缩写。 事务的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,283
精华内容 7,313
关键字:

java 手动事务批量提交

java 订阅