代码如下,如果sql语句里是分号结尾,会报下面的错误,如果去掉就正常运行,但是之前写的别的代码都是加分号的,就不报错,这是为什么?
public void test() throws Exception {
long satrt = System.currentTimeMillis();
//sql语句
String sql = "insert into goods(name)values(?)";
Connection conn = JDBCUtils.getConnection();
PreparedStatement ps = conn.prepareStatement(sql);
//批量插入
for (int i = 1; i <= 20000; i++) {
ps.setString(1, "name_" + i);
ps.addBatch();
if (i % 500 == 0) {
ps.executeBatch();
ps.clearBatch();
}
}
//计算时间
long end = System.currentTimeMillis();
System.out.println(end-satrt);
JDBCUtils.closeResource(conn, ps);
}
在 JDBC 中使用 addBatch 方法批量插入数据时,如果 SQL 语句结尾有分号,会报语法错误,这是由于在 JDBC 编程中,每个执行的 SQL 语句结尾不能有分号,否则会被认为是一个新的 SQL 语句,从而导致语法错误。
在你提到的情况中,使用分号结尾的 SQL 语句可能不会导致语法错误的原因可能是在具体实现中使用了一些特殊的处理逻辑来忽略分号的影响,但这并不是 JDBC 返回语法错误的标准行为,所以我们在编写 JDBC 代码时,最好遵循不在 SQL 语句结尾加分号的规范,以免遇到不必要的问题。