使用System.CurrentTimeMillis()测量Java错误时间

时间:2015-10-02 00:22:33

标签: java mysql jsp

我目前在测量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>

2 个答案:

答案 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对象中包装queryStartqueryEnd并减去两个日期。