【发布时间】:2016-02-20 04:37:00
【问题描述】:
我有一些代码可能会在表中插入大量行。我目前正在使用 Spring 的JdbcTemplate.update 来执行 SQL,但我有一个顾虑。
该方法,就像它所委托的裸 JDBC 的 Statement.executeUpdate,返回一个 int,其中最大值当然是 231 = 2147483648。
那么,问题是,在这种情况下,JDBC 会做什么?返回 MAX_INTEGER,其他数字,抛出异常?或者行为可能是平台(或驱动程序)特定的?我同时支持 SQL Server(通过 jTDS)和 Oracle(通过瘦驱动程序)。
【问题讨论】:
-
等等,你的应用程序真的会在同一个语句中插入超过 20 亿行吗?还是纯粹的理论问题?
-
是的,在极少数情况下;从广义上讲,它是将行从一个表复制(转换)到另一个。
-
我认为您不应该为此使用 Java。如果要将数据从一个表复制到另一个表,请使用您的数据库工具(如存储过程)。我什至无法开始意识到序列化这些数据并来回发送到数据库需要多长时间,但我想这将是巨大的(足够大以至于不再有问题,因为应用程序将在那里死掉)。
-
仅供参考,在 Java 8 中有一个
executeLargeUpdate,它返回一个long,但您必须确保 JDBC 驱动程序支持它。 -
我可能给了错误的印象;数据没有流经 Java 应用程序。当您使用
select执行insert时,所有工作都在DMBS 中完成。我很欣赏对最佳方法的关注(例如专用的 ETL 工具)。在这一点上,我主要对这种情况下的行为感兴趣。
标签: java oracle jdbc spring-jdbc jtds