数据库会被这个代码命中2次吗?

时间:2013-07-30 10:00:23

标签: java sql hibernate java-ee scrollableresults

我正在努力提高api的性能。我需要知道标记的第二行是否也会命中数据库?因为我想尽量减少这一点。

     StringBuffer queryBuf = new StringBuffer("some query in SQL");
--------->StringBuffer queryBuf2 = new StringBuffer(" SELECT DISTINCT PP.ID FROM ( " + queryBuf + ") PP ");
        Query query1 = getSession().createSQLQuery(queryBuf2.toString());
        query1.setReadOnly(true);
        ScrollableResults results = query1.scroll();
        if (results.isLast() == false)
            results.last();
        int total = results.getRowNumber() + 1;
        results.close();
        logger.debug(">>>>>>TOTAL COUNT<<<<<< = {}", total);

5 个答案:

答案 0 :(得分:2)

没有。只有行ScrollableResults results = query1.scroll();执行sql。

此外,您可能希望使用SQL COUNT

答案 1 :(得分:2)

它简单易用,你只是创建了StringBuffer对象。

答案 2 :(得分:2)

你只是创建一个字符串缓冲区。它没有击中数据库。如果我对这个代码可能会给出编译错误。

答案 3 :(得分:1)

  

我需要知道标记的第二行是否也会命中数据库?

您正在构建前三行中的StringBuffer个对象,为什么它会击中数据库!如果不需要同步,您可以使用StringBuilder

答案 4 :(得分:1)

不,它不会打到数据库。它将从第一个查询创建的缓冲区中进行查询。