Spring 的 JDBCTemplate 使用preparedStatement操作SqlServer数据库的问题
大家好。
我现在工作中遇到了一个问题。
业务逻辑层使用Spring,数据层是Spring提供的JDBCTemplate
在执行SQL语句的时候,会用到类似如下的方式执行代码
Java code
this.getJdbcTemplate().query(new PreparedStatementCreator(){
/*
*这里的方法主要是实现prepareStatement方法
*根据SQL语句里的?,把参数设置到ps对象上
*然后返回ps对象
*/
}, new RowMapper(){
//这里的方法就不写了
});
但是我发现一个问题。如果我用上述方式执行SQL语句,一次查询需要20多秒返回。关于数据量和数据结构我就不多解释了,因为已经发现和这些无关了。如果在SqlServer的查询分析器里执行这条SQL语句,只需要不到1秒的时间。
起初我以为是本地的链接受限。后来发现,当我不使用preparedStatement执行SQL语句的时候,比如,我在代码里,把参数以字符串的形式拼在SQL语句的String对象里,直接使用
Java code
this.getJdbcTemplate().query(sql, new RowMapper(){});
这样的方法,执行SQL返回数据只需要不到1.5秒的时间。
在网上查阅了一些资料,貌似是使用preparedStatement的时候,如果SQL语句参数里有字符串类型
驱动程序会执行一些操作,进行转码或者类似的一些工作。查询效率低,就是这个原因。
有人说,在配置数据源的时候,url参数里,加一个 sendStringParamtersAsUnicode=false
就可以让驱动程序不再自动去做转码工作
但是我发现不行。
所以特来问下各位同学,有没有人遇到过这个问题,以及如何解决。
谢谢
------解决方案--------------------
是否是查询字段过多?导致,网络数据量大?
你前面使用ps和后面使用的sql是否一致?
------解决方案--------------------关注中。。。
------解决方案--------------------