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语句最后的";"分号问题,无语


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

mysql的prepared_statement

具体的看了一下mysql的prepared_statement,发现它其实就是做了一个防止sql注入的工作,先解析一个statement,然后根据传上来的参数进行escape,然后重新组成一个sql,...

MySQL的简单操作方法:Statement、PreparedStatement

(1)连接mysql的工具类:DBUtil.javapackage com.xuliugen.util;import java.sql.Connection; import java.sql.Driv...

JDBC批量执行executeBatch

JDBC执行SQL语句,有两个处理的接口,一个PreparedStatement,Statement,一般操作JDBC比较用得多的还是PreparedStatement不过在执行批量,Prepared...

以mysql为例介绍PreparedStatement防止sql注入原理

最近,在写程序时开始注意到sql注入的问题,由于以前写代码时不是很注意,有一些sql会存在被注入的风险,那么防止sql注入的原理是什么呢?我们首先通过PrepareStatement这个类来学习一下吧...

mysql Prepared Statements

http://dev.mysql.com/doc/refman/5.1/en/sql-syntax-prepared-statements.html 一:介绍 从 5.1开始,mysql支...

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():向批处...

获得PreparedStatement向数据库提交的SQL语句,相关

/** * 获得PreparedStatement向数据库提交的SQL语句 * * @param sql:带占位符?的原始sql * @param params:参数数组 * @r...

使用p6spy打印hibernate或者PreparedStatement的带参数值的sql语句

不管在何种环境下用过hibernate的人都知道,哪怕用了show_sql打印出来的sql也是由占位符号的,占位符号的参数值是没有显示出来的,这个开发调试过程中很不方便。同样就算是原生的Prepare...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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