日期:2014-05-17  浏览次数:20917 次

JDBC查询SQLServer2008速度很慢
用了sqljdbc4.jar这个包去访问SQLServer2008,仅仅是做查询,而且是按索引查的,用企业管理器查瞬间(毫秒级)就出来了,用JDBC查要秒级,代码如下:

// 获取连接
public void getConnect()
{
try {  
            //注册驱动程序  
            Class.forName(driverNameOfSqlServer);  
            Properties info = new Properties();
            info.put("user", databaseUser);
            info.put("password", databasePassword);
            info.put("sendStringParametersAsUnicode", "false");
            // 获取连接  
            connect = DriverManager.getConnection(databaseUrl, info);  
            connect.setReadOnly(true);
        } catch (Exception e) {  
logger.error(e.getMessage(), e);
        }  
}
// 获取结果集
public ResultSet getResultSetQuery(String sql) 
{    
        try 
        {  
         long startTime = new Date().getTime();
         PreparedStatement statement = connect.prepareStatement(sql,
ResultSet.TYPE_FORWARD_ONLY,    ResultSet.CONCUR_READ_ONLY);
         ResultSet resultSet = statement.executeQuery();
         CachedRowSet rowSet = new CachedRowSetImpl();  
         rowSet.populate(resultSet);
         resultSet.close();
         statement.close(); 
         long spanTime = new Date().getTime() - startTime;
         if(spanTime > 1000)
         logger.info("Too slow when query db:" + spanTime);
            return rowSet;  
        } catch (Exception e) {  
logger.error(e.getMessage(), e); 
        }  
         
        return null;  
 }  


网上大部分此类问题的解决方法都是将sendStringParametersAsUnicode设置为false,可我设置了还是不行。。。

再补充一下现象:
当SqlServer缓冲了之前查询的数据后,再次用JDBC查询就非常快了
------解决方案--------------------
当SqlServer缓冲了之前查询的数据后,再次用JDBC查询就非常快了

这个是由于,数据都在内存中,那么访问这些数据就会快了,因为本来是要从硬盘上去访问的,而从 硬盘访问的速度是比较慢的