JDBC批量运行executeBatch

JDBC运行SQL语句,有两个处理的接口,一个PreparedStatement,Statement,一般操作JDBC比較用得多的还是PreparedStatement

只是在运行批量,PreparedStatement有点不够Statement

ps = conn.prepareStatement(sql);

for(int i = 0;i<10;i++){

ps.setString(1,"1");

//PreparedStatement批处理方式一

ps.addBatch();

}

//PreparedStatement批处理方式二

ps.addBatch("静态SQL");

ps.executeBatch();

这个是正常运行的

但是把PreparedStatement放到里面就没效了,下面:

for(int i = 0;i<10;i++){

ps = conn.prepareStatement(sql);

ps.setString(1,"1");

ps.addBatch();

}

ps.executeBatch();

Statement适合循环赋值到sql,代码下面:

Statement st = conn.createStatement();

for(int i = 0;i<10;i++){

st.addBatch("静态sql..........");

}

st.executeBatch();

这个是正常运行全部的语句

总结:造成这种原因是

Statement st = conn.createStatement();这里能够不放SQL语句

ps = conn.prepareStatement(sql);这个一定要放初始SQL语句

JDBC的批处理不能增加select语句,否则会抛异常:

java.sql.BatchUpdateException: Can not issue SELECT via executeUpdate().
  at com.mysql.jdbc.StatementImpl.executeBatch(StatementImpl.java:1007)

时间: 2024-10-08 13:54:22

JDBC批量运行executeBatch的相关文章

jdbc批量插入实现大批量数据快速插入

今天在做一个将excel数据导入数据库的程序时,由于数据量大,准备采用jdbc的批量插入.于是用了preparedStatement.addBatch();当加入1w条数据时,再执行插入操作,preparedStatement.executeBatch().我原以为这样会很快,结果插入65536条数据一共花30多分钟,完全出乎我的意料.于是问了一下同事,他们在处理这种大批量数据导入的时候是如何处理的,发现他们也是用的jdbc批量插入处理,但与我不同是:他们使用了con.setAutoCommit

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

今天用jdbc批量添加数据的时候遇到了一个问题,当数据添加成功过后,再想对该表进行操作发现表被锁住了,检查了下代码发现事务提交了呀!!!!!!!!!!!! 去网上查了大半天的资料才发现问题,在connection  commit过后需要加上 connection.setAutoCommit(true); 下面是示例代码 log.info("插入语句" + sql); //获取结果集 connection = JdbcUtils.getConnection(database.getMys

bat+sqlcmd 批量运行脚本

Hello,此BAT脚本可以帮助开发人员将某文件夹下所有SQL脚本按文件名依次在指定数据库中批量执行.不用忍受powershell invoke-sqlcmd 的笨重,在指运行时多一种选择. bat文件 @echo off @REM ******** ******** General Batch for Starting SQL ******** ******** @REM %1 is the name of SQL script file @rem SET SQL_NAME=%1 @SET S

Linux批量运行命令

需求: 要在Linux下面执行很多条命令,并且每条命令执行的时间会很长. 解决办法: 编写一个sh脚本,将多条命令放入到此脚本中,执行执行脚本就可以了. 例: test.sh Linux代码   #!/bin/sh java -classpath :/home/javaliujie/mysql-connector-java-3.1.12-bin.jar:/home/javaliujie/myLib.jar: cn.com.TestMain 20090201 java -classpath :/h

批量运行文件

#coding=utf-8 import os import time def Rename(foldname): for parent,dirnames,filenames in os.walk(foldname): for filename in filenames: os.rename(os.path.join(parent, filename), os.path.join(parent, filename+'.exe')) time.sleep(2) os.system(os.path.

springcloud学习之路: (二) springcloud打jar包并批量运行

springcloud中内置了tomcat所以打包的时候是直接把tomcat打入jar包 之后就可以做到, 单独的服务, 独立的jar包, 独立运行的效果了. 一.打jar包 1. 在pom.xml文件中<build>标签中可以新增<finalName>标签自定义jar包名称 2. 点击idea操作界面右侧的"maven" 3. 对每个子工程分别打包, 父工程不需要打包 4. 打包成功 5. target文件夹下可以找到生成的jar包 6. 重复以上步骤生成其他

JDBC batch批量Statement executeBatch 详细解释

JDBC提供了数据库batch处理的能力,在数据大批量操作(新增.删除等)的情况下能够大幅度提升系统的性能.我曾经接触的一个项目,在没有採用batch处理时,删除5万条数据大概要半个小时左右,后来对系统进行改造,採用了batch处理的方式,删除5万条数据基本上不会超过1分钟.看一段JDBC代码: // 关闭自己主动运行 con.setAutoCommit(false); Statement stmt = con.createStatement(); stmt.addBatch("INSERT I

JDBC批量插入数据优化,使用addBatch和executeBatch

>>.在之前的玩转JDBC打造数据库操作万能工具类JDBCUtil,加入了高效的数据库连接池,利用了参数绑定有效防止SQL注入中其实忽略了一点,那就是SQL的批量插入的问题,如果来个for循环,执行上万次,肯定会很慢,那么,如何去优化呢? https://www.awaimai.com/841.html 一.用 preparedStatement.addBatch()配合preparedStatement.executeBatch()去批量插入 1 /** 2 * 执行数据库插入操作 4 *

JDBC: 批量处理提高SQL处理速度

   当需要成批插入或者更新记录时.可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理.通常情况下比单独提交处理更有效率 JDBC的批量处理语句包括下面两个方法: addBatch(String):添加需要批量处理的SQL语句或是参数: executeBatch():执行批量处理语句: 通常我们会遇到两种批量执行SQL语句的情况: 多条SQL语句的批量处理: 一个SQL语句的批量传参: 测试代码: import java.sql.Connection; import