我有一些代码可能会在表中插入大量行。我目前正在使用Spring的JdbcTemplate.update
来执行SQL,但我有一个问题。
该方法与其所委托的JDBC Statement.executeUpdate
一样,返回int
,其中最大值当然为2 31 = 2147483648。
所以,问题是,JDBC在这种情况下做了什么?返回MAX_INTEGER,其他一些数字,抛出异常?或者行为可能是平台(或驱动程序)特定的?我支持SQL Server(通过jTDS)和Oracle(通过瘦驱动程序)。
答案 0 :(得分:1)
在JDBC 4.2(Java 8的一部分)中,我们有:Statement
类有一个方法executeLargeUpdate
,用于执行行数超过Integer.MAX_VALUE
的更新。
https://docs.oracle.com/javase/8/docs/api/java/sql/Statement.html
答案 1 :(得分:1)
它依赖于驱动程序,因为Statement是一个必须由供应商的jdbc驱动程序实现的接口。
举个例子,这是MySQL jdbc驱动程序中发生的事情
public int executeUpdate(String sql) throws SQLException {
return Util.truncateAndConvertToInt(executeLargeUpdate(sql));
}
表示
public static int truncateAndConvertToInt(long longValue) {
return longValue > Integer.MAX_VALUE ? Integer.MAX_VALUE : longValue < Integer.MIN_VALUE ? Integer.MIN_VALUE : (int) longValue;
}
因此,在这种特定情况下,对于此特定驱动程序,它将返回Integer.MAX_VALUE,并且不会抛出任何异常。
MySQL jdbc驱动程序和源代码可在http://dev.mysql.com/downloads/connector/j/
中找到