Java Resultset.get***(…)通过字符串或int更快?

Java Resultset.get***(…)通过字符串或int更快?,java,sql,resultset,Java,Sql,Resultset,以标准方式迭代结果集时 while (rs.next()){ ... } 要检索列数据(例如long),使用 rs.getLong(String columnLabel) 或 可能columnLabel在很多方面都能更好地用于更强大的代码,但是每次将一列与字符串匹配(我们讨论的是大约4000万行的表大小)是否会造成严重的操作损失?我建议您更多地考虑清楚的内容,而不是更快的内容 下面是一个例子: 假设您有一个查询,select*from…,当您迭代结果集时,您调用的是String a=Resu

以标准方式迭代结果集时

while (rs.next()){
...
}
要检索列数据(例如long),使用

rs.getLong(String columnLabel)


可能columnLabel在很多方面都能更好地用于更强大的代码,但是每次将一列与字符串匹配(我们讨论的是大约4000万行的表大小)是否会造成严重的操作损失?

我建议您更多地考虑清楚的内容,而不是更快的内容

下面是一个例子: 假设您有一个查询,
select*from…
,当您迭代结果集时,您调用的是
String a=ResultSet.getString(1)
int i=ResultSet.getInt(2)

然后更改表定义,以便有更多的列。。。突然之间,所有GET都将中断,因为您使用int引用了所有内容。如果您使用列名引用,则不会中断


对我来说,这似乎比按列编号引用要清楚得多。在以后尝试调试旧代码以找出代码崩溃的原因时,还可以节省大量时间。

完全取决于内部结构。如果他们操作任何类型的缓存,这都不会有什么大不了的。如果他们使用hashmap,它不太可能是实质性的。一个为支持这一点而设计的系统不会有太多的问题。但是,您应该真正考虑在代码的上下文中什么更有意义,如果配置文件显示性能问题,请回到这一点。

我敢打赌,与准备结果集的成本相比,差异是可以忽略的。喜欢健壮的代码。

您可以同时拥有这两种代码中最好的一种!使用索引的速度以及使用列名的可维护性和安全性

首先-除非您在结果集中循环,否则只需使用列名

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

2.在结果集之前,循环遍历列元数据,并将每个整数变量的值设置为对应列名的列索引。如果“Last_Name”列的索引为3,则将“iLast_Name”的值设置为3

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


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

首先,让它正常工作。然后,使其可维护。只有这样,才能分析和优化已识别的瓶颈。不要过早地优化。好的建议。我从一个遵循getLong(int)模式的库中扩展了一个抽象类,尽管列名都指定为字段。对我来说似乎有点奇怪,所以我想知道是否有一个像样的理由来进行这种编码!显然不是……为什么没有人真正回答这个问题,每个人似乎都认为优化是浪费时间?我完全同意。这就是我用“更好地在许多方面使用更强大的代码”一行不雅观地抹平的一点。你确定这会更快吗?很高兴看到一个代码示例。
rs.getLong(int columnIndex)