巨大的字符串使Netbeans中的Java类无响应
我在Java String
中使用以下结构进行非常大的SQL查询。巨大的字符串使Netbeans中的Java类无响应
BEGIN;
couple of thousand of INSERT INTO
END;
持有本String
类是几乎没有反应在NetBeans IDE中,由于文件大小。存储,加载和运行这样的大型查询的最佳方式是什么?
假设您想要从Java内部运行命令(不使用db的批量加载二进制文件),可以将SQL存储在单独的(资源)文件中,将该文件读取为字符串形式的Java,然后执行它针对数据库。另外一个好处(除了不再存在于Java文件中),您可以命名资源文件,让您的IDE为您提供SQL(假设您的IDE可以这样做)。
这不是一个大的查询,它是很多小的查询。除非你尝试一种不同的方法,否则你将无法做到这一点。写出一个文件并使用批量加载实用程序将数据存入数据库可能是您的最佳选择。
我强烈建议使用ETL工具来完成此操作。他们有散装装载机部件,这将让你的生活变得更加轻松。过去我曾经使用过DataStage和Pentaho(水壶)来做这样的事情。水壶是开源的。你可以从here下载它。例如,这里是关于oracle bulk loader的简要信息。
您可能会发现下面的快(假设所有的刀片都到同一个表)
BEGIN
INSERT INTO <my_table>
SELECT <blah1>
UNION ALL SELECT <blah2>
UNION ALL SELECT <blah3>
...
UNION ALL SELECT <blah1000>
END
这是一个很大的插入,而不是1000个小插件。这减少了许多开销,并且运行速度通常更快。
然而,作为一种痛苦,这也意味着进入交易日志更大。当你得到数以百万计的插入时,你可能会发现批量执行速度会更快。
UNION将许多小操作合并为一个。
几个较小的操作对事务日志的影响较小。
[可能谈论数十/的记录千百,或更多]
如果我正确理解你的问题,你有一个包含一个字符串(或多个)的一个非常大的Java源文件与成千上万的小插件的声明? 在这种情况下,作为第一步,您应该考虑将这些语句外部化为单独的文本文件。在您的Java代码中,然后使用模板引擎来加载文件的语句。但是,如果你想有效地运行很多小插入,你可能要考虑使用批量加载器或etl工具(想起水壶或Apache Camel)。
我的印象是你误解了*实际*问题。他在Java源文件中有这些查询明文,这导致文件大小变得如此之大,以至于编辑Java源代码时编辑器的响应速度较慢。然后将单独文件中的所有SQL外部化,而这些文件只是在编辑器中不打开,这才是正确的答案。 RHSeeger已经回答了。 – BalusC 2010-06-21 13:55:58
@BalusC,把SQL放到一个单独的文件中,以便IDE可以正常工作,但运行“几千个INSERT INTO”不会很快或很高效。使用批量加载是最好的选择,它将分离文件,以便IDE能够快速高效地将数据存入数据库。 – 2010-06-21 15:43:42
我同意这一部分:)然而,这并不是提问者*实际*提出的问题。 – BalusC 2010-06-21 16:02:09