mysql PreparedStatement executeBatch SQL语句的问题

原创 2012年03月26日 15:55:15

今天在使用executeBatch时,使用一个很简单的表

CREATE TABLE IF NOT EXISTS `fnbl_dummy` (
  `id` varchar(32) NOT NULL,
  `userid` bigint(20) NOT NULL,
  `last_update` bigint(20) NOT NULL,
  `status` char(1) NOT NULL,
  `p_content` varchar(200) NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

做批量插入

                        String SQL_INSERT_INTO_FNBL_DUMMY = "INSERT INTO fnbl_dummy(id,userid,last_update,status,p_content) VALUES (?,?,?,?,?);";
                        Connection con = null;
			PreparedStatement ps = null;
			try {
				con = getUserDataSource().getRoutedConnection(userId);
				con.setAutoCommit(false);
				ps = con.prepareStatement(SQL_INSERT_INTO_FNBL_DUMMY);
				
				for (DummyWrapper item : items) {
					Timestamp lastUpdate = item.getLastUpdate();
					if (lastUpdate == null) {
						lastUpdate = new Timestamp(System.currentTimeMillis());
					}
					
					ps.setString(1, item.getId());
					ps.setLong(2, Long.parseLong(this.userId));
					ps.setLong(3, lastUpdate.getTime());
					ps.setString(4, String.valueOf(Def.PIM_STATE_NEW));
					ps.setString(5, StringUtils.left(item.getContent(), SQL_LASTNAME_DIM));
					ps.addBatch();
				}
				
				int []len = ps.executeBatch();
				con.commit();
				return len.length;
			} catch (Exception e) {
				log.error(e.toString());
				throw new DAOException("Error adding dummy items.", e);
			} finally {
				DBTools.close(con, ps, null);
			}
结果运行是单条测试一直OK,多条测试一直提示“java.sql.BatchUpdateException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ”,查找原因竟然是因为SQL语句最后的";"分号问题,无语


JDBC batch批处理Statement executeBatch 详解

JDBC提供了数据库batch处理的能力,在数据大批量操作(新增、删除等)的情况下可以大幅度提升系统的性能。我以前接触的一个项目,在没有采用batch处理时,删除5万条数据大概要半个小时左右,后来对系...
  • basenet855x
  • basenet855x
  • 2011年09月27日 16:36
  • 60739

JDBC的PreparedStatement启动事务使用批处理executeBatch()

JDBC使用MySQL处理大数据的时候,自然而然的想到要使用批处理, 普通的执行过程是:每处理一条数据,就访问一次数据库; 而批处理是:累积到一定数量,再一次性提交到数据库,减少了与数据库的交互次数,...
  • xiong9999
  • xiong9999
  • 2016年11月21日 13:38
  • 2115

关于jdbc批量操作(addBatch, executeBatch)的测试

由于项目上有大批量数据插入和更新的操作,所以使用了jdbc的批量操作功能。在此之前参考了很多文章包括jdbc的手册(https://www.tutorialspoint.com/jdbc/jdbc-b...
  • zhangw1236
  • zhangw1236
  • 2017年01月17日 15:01
  • 1078

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

JDBC批量插入数据优化,使用addBatch和executeBatch 在之前的玩转JDBC打造数据库操作万能工具类JDBCUtil,加入了高效的数据库连接池,利用了参数绑定有效防止SQL注入 ...
  • u010785585
  • u010785585
  • 2016年12月22日 09:25
  • 7384

JAVA对MYSQL数据库进行批量操作,addBatch(),executeBatch()方法

有人说MySql的JDBC驱动,不是真正支持批量操作的,就算你在代码中调用了批量操作的方法,MySql的JDBC驱动也是按照一般操作来处理的。 但其实并非如此,Mysql 是有特殊的方式优化整个...
  • miclung
  • miclung
  • 2012年02月03日 16:26
  • 6463

mysql 三种关于executeBatch()的测试

  我采用的是mysql数据库,插入100000条纪录,分为三部分测试,一是直接插入,二是使用executeBatch,三是批量是用executeBatch,下面试我得源码和测试结果。  Connec...
  • wurfl
  • wurfl
  • 2008年12月18日 11:27
  • 3623

PreparedStatement批量处理和事务代码

PreparedStatement批量处理和事务代码如下: /* * PreparedStatement: 1.addBatch() 将一组参数添加到 PreparedState...
  • hwsdau
  • hwsdau
  • 2016年09月23日 11:52
  • 6876

mysql PreparedStatement executeBatch SQL语句的问题

今天在使用executeBatch时,使用一个很简单的表 CREATE TABLE IF NOT EXISTS `fnbl_dummy` ( `id` varchar(32) NOT NULL,...
  • mrliu20082009
  • mrliu20082009
  • 2012年03月26日 15:55
  • 2212

oracle的PreparedStatement.executeBatch为什么返回-2

PreparedStatement.executeBatch的方法在底层调用了一个void的executeForRows的方法来执行,他们很懒,为了复用这个方法,于是就失去了返回值,也就无法知道当前执...
  • axman
  • axman
  • 2013年05月20日 17:26
  • 4117

PreparedStatement executeBatch()的返回值的问题(转)

int[] executeBatch() throws SQLException   将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。返回数组的 int 元素的排序对应...
  • su20145104009
  • su20145104009
  • 2015年10月02日 10:30
  • 3292
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mysql PreparedStatement executeBatch SQL语句的问题
举报原因:
原因补充:

(最多只允许输入30个字)