我目前在测量 JAVA 代码中 SQL 查询所花费的时间时遇到问题。在下面的代码中,stmt.executeQuery(query.getQuery());
将执行 SQL 查询,我使用 System.currentTimeMillis()
来查看查询需要多长时间需要。问题是,在下面的 jsp 页面中,我查看 queryTime
的结果,我得到诸如 The query take 18:00:00:055 time.
的结果一个极其简单的数据库(2 个非常小的表)和一个极其简单的查询。 18 小时显然不是一个现实的时间,因为查询在我的计算机上运行只需几毫秒。我做错了什么?
编辑:为了响应提交的答案,我将 queryDuration
与提交用于测试和获取结果的 sql 查询一起输出到控制台,例如(其中在 SQL 查询后输出毫秒)输入的内容):
query (from controller): select * from service_request
milliseconds: 1
query (from controller): select * from data_file where service_request_id = '2'
milliseconds: 0
path: www.foobar.com/custom/bin/lib/
path: www.foobar.com/images/resources/
query (from controller): select FN_Contact from service_request where Notes IS NOT NULL
milliseconds: 10
query (from controller): select FN_Contact from service_request where Notes IS NULL
milliseconds: 0
query (from controller): select Notes, LN_Contact from service_request where FN_Contact = 'Amanda'
milliseconds: 0
当一些看似更复杂的查询在更短的时间内完成时,这有什么意义? (这些表非常小,每个表有 4-5 列,每个表有 4-5 个条目)
java计算查询时间:
long queryStart = System.currentTimeMillis();
ResultSet rs = stmt.executeQuery(query.getQuery());
long queryEnd = System.currentTimeMillis();
long queryDuration = queryEnd-queryStart;
Date queryDurationTime = new Date(queryDuration);
DateFormat formatter = new SimpleDateFormat("HH:mm:ss:SSS");
String dateFormatted = formatter.format(queryDurationTime);
queryTime = dateFormatted;
在jsp页面上显示queryTime:
<c:choose>
<c:when test="${empty queryTime}">
</c:when>
<c:otherwise>
<h3>Results:</h3>
The query took ${queryTime} time.
</c:otherwise>
</c:choose>
最佳答案
问题是您将以毫秒为单位的时间差转换为日期。返回以毫秒为单位的时间差 queryDuration
,或者将 queryStart
和 queryEnd
包装在 Date 对象中,然后将两个日期相减。
关于Java 使用 System.CurrentTimeMillis() 测量时间时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32898766/