如何从ResultSet的行中的列获取int []数组?

时间:2016-06-29 20:09:56

标签: java arrays jdbc

我使用以下方法将int中的ResultSet值放入int数组中。这似乎非常有效但我无法弄清楚如何获得一个原始int的数组,我不知道它的大小。

List<Integer> ints = ArrayList<Integer>();

while ( results.next ) ints.add( results.getInt( "id" );

int[] intsArray = new int[ ints.size() ];
for ( int i = 0; i < ints.length; i++ ) int[ i ] = ints.get( i ); //auto-boxes here

我需要这些是原始数组,因为这是方法所需要的。

2 个答案:

答案 0 :(得分:2)

如果您不知道从结果集中读取的值的数量,您实际上无法避免使用列表。

但如果您有一个列表类可以存储原始List<Integer>值,例如trove projectint,则可以避免使用TIntList

最后,您应该真正衡量使用中间Integer对象对性能的影响,然后才能在这个问题上花费太多精力。

答案 1 :(得分:0)

ArrayList转换为数组

您必须猜测初始大小,然后在填充其最后一个元素时调整数组大小,并在完成结果集时根据需要重复。

此行为正是ArrayList已经为您提供的行为。但已经调试过。 ; - )

所以只需使用ArrayList<Integer>即可。最后转换为数组。

您可能会考虑使用Collection::toArray。但该实用程序只能返回一个对象数组,而不是基元。

请参阅this Question,了解转换为基元数组的几种好方法。

我的选择是呼叫Google Guava。虽然为此目的添加Guava可能有点过分,但Guava非常有用,因此我默认将库添加到大多数新的Java项目中。

List< Integer > list = ... ;
int[] values = Ints.toArray( list ) ;

如果您的部署环境对内存非常紧张,或者您有非常多的元素,或者您经常执行此操作以影响性能,那么我才会采用填充和调整大小的方式数组int手动自己。