Java Resultset.get ***(...)由string或int更快?

时间:2010-08-16 12:06:34

标签: java sql resultset

以标准方式迭代Resultset

while (rs.next()){
...
}

要检索列数据(例如长),可以更快地使用

rs.getLong(String columnLabel)

rs.getLong(int columnIndex)

推测columnLabel最好以多种方式用于更强大的代码,但是每次通过匹配一个列到字符串会有很大的操作损失(我们说的是大小约为40m的表)?

4 个答案:

答案 0 :(得分:3)

我打赌,与准备结果集的成本相比,差异是可以忽略的。赞成强大的代码。

答案 1 :(得分:1)

你可以充分利用两者!使用索引的速度与使用列名的可维护性和安全性。

首先 - 除非你通过结果集循环,否则只使用列名。

1.定义一组整数变量,每个变量对应一个列。变量的名称可以包括列的名称:例如iLast_Name。

2.在结果集循环之前,通过列元数据迭代并将每个整数变量的值设置为相应列名的列索引。如果'Last_Name'列的索引是3,则将'iLast_Name'的值设置为3.

3.在结果集循环中,使用GET / SET方法中的整数变量名称。对于正在访问的实际列名,变量名是开发人员/维护者的直观线索,但值是列索引,将提供最佳性能。

注意:初始映射(即列名到索引映射)仅在循环之前完成一次,而不是循环中的每个记录和列。

答案 2 :(得分:0)

我建议你更多地考虑什么比更快更清楚。

这是一个例子: 假设您有一个查询select * from ....,当您遍历ResultSet时,您正在调用String a = resultSet.getString(1)int i = resultSet.getInt(2)等等

然后你改变了你的表定义,以便你有更多的列...突然间你所有的获取都会破坏,因为你用int引用了所有内容。如果您按列名称引用,则不会有中断。

对我来说,这似乎比列号引用要清楚得多。在尝试调试旧代码时,您还可以节省大量时间来弄清楚它为什么会破坏。

答案 3 :(得分:0)

完全取决于内部结构。如果他们运行任何类型的缓存,这将不是什么大问题。如果他们使用散列图,则不太可能是实质性的。设计用于支持此功能的系统不会有太多的麻烦。但是,您应该考虑在代码上下文中更有意义的内容,并在配置文件演示性能问题时再回过头来看。