Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与普通PreparedStatement相比,使用SpringJDBCTemplate对性能的影响_Java_Oracle_Spring_Jdbctemplate - Fatal编程技术网

Java 与普通PreparedStatement相比,使用SpringJDBCTemplate对性能的影响

Java 与普通PreparedStatement相比,使用SpringJDBCTemplate对性能的影响,java,oracle,spring,jdbctemplate,Java,Oracle,Spring,Jdbctemplate,我只是在对一个复杂的系统进行基准测试,发现通过Spring进行的查询非常慢 它增加了约600毫秒 基准代码比较了以下各项: case TEMPLATE: { t = System.currentTimeMillis(); jdbcTemplate.update(getUnnamedPreparedStatement(query), new PreparedStatementSetter() { @Override public void setV

我只是在对一个复杂的系统进行基准测试,发现通过Spring进行的查询非常慢

它增加了约600毫秒

基准代码比较了以下各项:

case TEMPLATE:
{
    t = System.currentTimeMillis();
    jdbcTemplate.update(getUnnamedPreparedStatement(query), new PreparedStatementSetter() {

        @Override
        public void setValues(PreparedStatement ps) throws SQLException {
            int i = 1;
            for (Object o : queryParameters) {
                ps.setObject(i++, o);
            }
        }
    });
    break;
}

case PREPAREDSTATEMENT:
{
    Connection c = dataSource.getConnection();
    t = System.currentTimeMillis();
    PreparedStatement ps = c.prepareStatement(getUnnamedPreparedStatement(query));
    int index = 1;
    for (Object parameter: queryParameters) {
        ps.setObject(index++, parameter);
    }
    ResultSet rs = ps.executeQuery();
    rs.next();
    break;
}
两个查询都给出相同的结果,并且顺序无关紧要。 此外,它不依赖于查询类型(即选择、更新)

我已经进行了十几次测试,结果是稳定的


Spring jdbcTemplate做什么,PreparedStatement不做什么?

第一个案例执行更新查询,而第二个案例执行选择查询。第二个应该使用
ps.executeUpdate()
与第一个类似。

因为我上面的评论似乎是正确的答案,所以我会将其作为未来咨询的答案发布


@Felix,重用连接与spring无关,但与连接池有关(如果有的话)。因此,应该考虑到这一点


因此,基本上我认为spring项目中缺少连接池。

请注意:在您准备的声明场景中,您没有包括获得连接所需的时间。根据您的配置,假设此操作很琐碎或不合理的时间消耗是不安全的。pap谢谢您的回答。然而,在我的设置中,获得连接需要大约20毫秒。我假设jdbcTemplate重用现有的连接,并且不会在每次
更新
@Felix时获得新的连接,重用连接与spring无关,而是与您的连接池有关(如果您有)。因此,应该考虑到这一点。