我目前在测量sql查询在JAVA代码中占用的时间时遇到了问题。在下面的代码中,stmt.executeQuery(query.getQuery());
将执行SQL查询,我使用System.currentTimeMillis()
查看查询所需的时间。问题是,在我查看queryTime
结果的下面的jsp页面中,我得到了The query took 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>
答案 0 :(得分:0)
您可以在没有时间转换的情况下轻松完成。
使用Thread.sleep();
模拟1000毫秒操作的示例public static void main(String[] args) throws InterruptedException {
long queryStart = System.currentTimeMillis();
Thread.sleep(1000);
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;
System.out.println(queryDuration);
}
答案 1 :(得分:0)
问题是您要将时间差(以毫秒为单位)转换为日期。以毫秒为单位返回时间差queryDuration
,或在Date对象中包装queryStart
和queryEnd
并减去两个日期。