我刚接触java,但我在Matlab和C方面的经验训练我总是在将数组变量填充到循环中(例如for循环、While循环等)之前为该变量预先分配内存。
我发现自己正在使用ResultSet从Java语言的数据库中检索数据。快速搜索一下就会发现,如果不逐个遍历,就无法获得ResultSet中的行数。因此,基本问题是:在不知道ResultSet中的行数的情况下,如何预先分配用于存储ResultSet查询结果的Java变量的数组长度?
传统的观点是什么?例如,如果ResultSet包含两列数据,如何将每一列放入单独的Java数组变量中?
更新1:一些背景知识--我需要将ResultSet返回的所有内容都放到一个对象中,这样我就可以将该对象传递给一个非Java (例如ActionScript)程序,该程序通过该对象的内容与Java程序进行通信。
更新2:这是关于从Java到非Java的转换规则的文档(例如ActionScript)。也许是http://help.adobe.com/en_US/LiveCycleDataServicesES/3.1/Developing/WSc3ff6d0ea77859461172e0811f00f6eab8-7ffdUpdate.html
发布于 2012-03-06 18:55:03
为什么要将它添加到数组中?您可以轻松地遍历ResultSet
,将结果转换为适当的Object
,并将它们添加到ArrayList
...为您提供比添加到数组中更多的灵活性。
但是,如果您确实需要行数,我认为您需要在运行原始查询之前运行一个count
查询。
编辑:从您链接的文档中可以看出,如果您使用Java数组,您最终会得到一个ActionScript mx.collections.ArrayCollection
对象,而不是您使用Java数组时得到的ActionScript Array
对象。你选择使用哪一个,如果你不能改变你的ActionScript代码,只需要转换List -> array
...:
List<MyObject> myList = new ArrayList<MyObject>();
... populate myList from ResultSet ...
MyObject[] array = myList.toArray(new MyObject[myList.size()]);
发布于 2012-03-06 18:59:58
正如马塞洛所说,对于这个问题,ArrayList是一个更好的选择,但是您可以使用以下命令来欺骗它,而不是执行COUNT查询来知道返回了多少行:
rs.last();rs.getRow();
然后返回到后面的第一行。
https://stackoverflow.com/questions/9582127
复制相似问题