如何初始化java数组大小来存储数据库ResultSet数据?

时间:2012-03-06 10:48:38

标签: java database

我是java新手,但我对Matlab和C的经验训练我总是在循环中填充该变量之前预先为数组变量分配内存(例如For循环,While循环等)。

我发现自己使用ResultSet从Java数据库中检索数据。快速搜索显示,如果不单步执行,则无法获取ResultSet中的行数。因此基本问题:如何预先分配用于存储ResultSet查询结果的Java变量的数组长度,而不知道该ResultSet中的行数?

传统智慧是什么?例如,如果ResultSet包含两列数据,那么如何将每列放入单独的Java数组变量中?

更新1:一些背景 - 我需要将ResultSet返回的所有内容放入一个对象中,这样我就可以将该对象传递给非Java(例如ActionScript)程序,该程序通过该对象的内容与Java程序进行通信。

更新2:这是关于从Java到非Java(例如ActionScript)的转换规则的文档。也许 http://help.adobe.com/en_US/LiveCycleDataServicesES/3.1/Developing/WSc3ff6d0ea77859461172e0811f00f6eab8-7ffdUpdate.html

2 个答案:

答案 0 :(得分:3)

为什么要将它添加到数组中?您可以轻松遍历ResultSet,将结果转换为适当的Object,并将其添加到ArrayList ...比添加到数组更灵活。< / p>

但如果您确实需要行数,我认为您需要在运行原始查询之前运行count查询。

编辑:从您链接的文档中,如果您使用Java ArrayList,您最终会得到一个ActionScript mx.collections.ArrayCollection对象而不是ActionScript Array对象如果你使用了Java数组,那就得到了。您可以选择使用哪一个,如果无法更改ActionScript代码,只需转换List -> array ...:

List<MyObject> myList = new ArrayList<MyObject>();
... populate myList from ResultSet ...
MyObject[] array = myList.toArray(new MyObject[myList.size()]);

答案 1 :(得分:0)

正如Marcelo所说,对于这个问题,ArrayList是一个更好的选择,但是不是执行COUNT查询来知道返回了多少行,你可以使用以下方法欺骗它:

rs.last(); rs.getRow();

然后再回到第一行。