通过JDBC方式查询数据库生成数据效率低,请问下问题出在什么地方或者有什么解决方案?
测试环境:
WindowsXP SP3 + SQLServer 2005 + JBOSS 5.1.0GA + sqljdbc.jar
数据源配置
<connection-url>jdbc:sqlserver://127.0.0.1:1433;DatabaseName=uh_real</connection-url>
<driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
<user-name>test</user-name>
<password>test</password>
<metadata>
<type-mapping>MS SQLSERVER2000</type-mapping>
</metadata>
测试代码
ResultSet rs;
PreparedStatement pstmt;
..................
rs = pstmt.executeQuery();
MyObject obj;
while (rs.next()) {
obj = new MyObject();
obj.setId(rs.getInt("id"));
..........
}
.........
MyObject的字段不超过20个
测试结果,pstmt.executeQuery();花了大概200ms,取出500条左右的纪录,
然后执行 while(rs.next())循环转化成对象花去大概5s,很不理想。
通过SQL Server Management Studio查询并显示同样的纪录大概200ms
请教下大家,问题出在什么地方??谢谢
------解决方案--------------------与机器性能有关,你如果使用Hibernate持久 用HQL语言获取会快点
------解决方案--------------------在url上增加“SelectMethod=cursor”
另外尽量减少字段,尤其是较大的字段。
------解决方案--------------------pstmt.setFetchSize(1000) 试试
------解决方案--------------------jdbc 性能可比hibernate等都好
------解决方案--------------------JDBC直接访问数据库,没经过一些中间处理和转换过程,效率要比Hibernate好
但编码的复杂度要比Hibernate高很多!
------解决方案--------------------你试试看把left join里面的条件中等号两边的内容对调一下有没有效果。
啥根据都没有,完全瞎说的
留名学习
good luck
------解决方案--------------------
------解决方案--------------------如果没有参数Statement 比prepareStatement快;
有参数的话(动态sql)Statement 大多数情况比较慢了
------解决方案--------------------应该是sql语句的问题,自己看看能否在优化,用性能分析器看看哪个步骤消耗资源比较大,是否需要建立联合索引来解决。
------解决方案--------------------关注中。
jdbc算是java操作数据库最直接的方法了,在提高效率上我能想到的是优化sql,使用商品级的连接池,而hibernate基本上就不是为提高效率而来的,至于while(rs.next())花去5s我还真不知道说什么了。