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万条数据大概要半个小时左右,后来对系...

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

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

JDBC批量执行executeBatch

JDBC执行SQL语句,有两个处理的接口,一个PreparedStatement,Statement,一般操作JDBC比较用得多的还是PreparedStatement不过在执行批量,Prepared...
  • czmchen
  • czmchen
  • 2010年07月04日 11:53
  • 17179

关于executeBatch()的测试

          这些日子研究ECPerf的原码。今天下午,看到数据的载入。他是采用executeBatch实现的。他是批量的执行SQL语句。于是我写了个测试程序来测试executeBatch的性能...

JDBC批量执行executeBatch

JDBC事务 在数据库中,所谓事务是指一组逻辑操作单元,使数据从一种状态变换到另一种状态。为确保数据库中数据的一致性,数据的操纵应当是离散的成组的逻辑单元:当它全部完成时,数据的一致性可以保持,而当...

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

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

mysql 三种关于executeBatch()的测试

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

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

int[] executeBatch() throws SQLException   将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。返回数组的 int 元素的排序对应...

PreparedStatement与Statement对比、sql语句的被注入问题

PreparedStatement vs Statment 一、语法不同:PreparedStatement可以使用预编译的sql,而Statement只能使用静态的sql。 二、效率不同: Pre...

executeBatch()批量执行Sql语句

executeBatch()方法:用于成批地执行SQL语句,但不能执行返回值是ResultSet结果集的SQL语句,而是直接执行stmt.executeBatch(); addBatch():向批处...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mysql PreparedStatement executeBatch SQL语句的问题
举报原因:
原因补充:

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