我正在尝试将查询结果导出到CSV,但是即使我没有尝试导出到CSV,此问题仍然存在。以下代码与我的实际代码具有相同的逻辑和步骤,但这已更改了标头和变量名以使其更加清晰。 这是代码:
rs = statement.executeQuery(query);
//CSV HEADER
outputLines.add("Cow"+d+"Horse"+d+"Sheep"+newLineDelimiter);
int number =0;
while(rs.next())
{
//This was added to see the output speed in catalina.out
System.out.println(number);
number++;
Farm.LoadXmlByEntry(passStatement, rs.getFarm("entry_c"), tag);
//Declares variables as well as puts them into correct type, then escapes them as to not break the CSV format, this is a string
String cow = String.format("%s", Farm.CowNumber());
String horse = String.format("%s", ticket.HorseNumber());
String sheep = String.format("%s", ticket.SheepNumber());
//this is just a simple escaping sequence so any entered characters do not break the CSV format
cow = Escape.CSV(cow);
horse = Escape.CSV(horse);
sheep = Escape.CSV(sheep);
outputLines.add(cow+d+horse+d+sheep+newLineDelimiter);
}
现在,我添加了number
作为输出,因此我可以看到rs.next()
的运行速度。当查询的实际响应非常快时,结果将非常缓慢。
这是数字计数的实时记录(随着数字的增加,它会减慢一点时间,周期性地增加行数5000 +):
rs.next()
似乎引起性能问题。 是否有更好的方法可以更有效地解决此问题?
不是确切的查询,而是进行了更改以匹配上面的语法“从Farm_Table中选择牛,马,羊”;它还具有WHERE语句的日期范围,但是我没有选择它们,因为我只选择了全部。
我正在使用Java 6,我相信JDBC版本是spring-jdbc-3.0.6,并且我尚未设置“提取大小”。