2011-08-17 103 views
2

我在内存中有一个数字数组,我需要把它们放在一个临时表中,这样我就可以与其他表进行连接。该列表可以是5或它可以是250000. 我可以一次做一个插入,但我想知道是否有任何SQL技巧,我可以插入100一次插入一些select ....种类我没有想到的事情。什么是SQL插入一堆行的最快方法

批量上传器(在sybase中)不是一个选项,因为它没有Java实现,并且对bcp的shelling也不是一个选项。

回答

3

尝试JDBC批量插入。我从来没有与Sybase合作过,但这也适用于MySql,Postgres和Oracle。

Statement stmt = con.createStatement(); 

stmt.addBatch("INSERT INTO employees VALUES (1000, 'Joe Jones')"); 
stmt.addBatch("INSERT INTO departments VALUES (260, 'Shoe')"); 
stmt.addBatch("INSERT INTO emp_dept VALUES (1000, 260)"); 

// submit a batch of update commands for execution 
int[] updateCounts = stmt.executeBatch(); 

http://download.oracle.com/javase/1.3/docs/guide/jdbc/spec2/jdbc2.1.frame6.html

+0

这是否还是扩展到250,000插入单批? – MatBailie

+1

它可能。这取决于一个语句的大小。你必须自己尝试一下。随着您增加批量大小,您最终会以OutOfMemory结束。在一台配备1G内存的普通电脑上,我通常使用50k批量大小的应用程序(Xmx)。我发现50k和100k之间没有显着差异:对于1M记录,无论您在应用程序和数据库之间进行10或20次往返,几乎都是一样的。 – bpgergo

+0

超过1的任何批次将是一个巨大的改进。谢谢。 – stu

相关问题