sql语句把两个问号改成相关参数,放在sql2000的企业管理器运行正常,但放在程序里,却发现sql2000占用cpu100%,多时都没有反映。郁闷
解决方案 »
- tomcat6启动项目报错
- 新手求救。
- 如何在list中删除我指定的对象
- hibernate 更新数据 tomcat
- DispatchAction怎样使用?
- java替换 批量文件中的指定字符串 或者替换流中的字符串
- 高手帮忙看看 急 一直出HTTP Status 404 - Servlet action is not available 问题
- 有关ejb的问题
- weblogci8的问题,高手们过来研究研究
- 在APPLET中使用JDBC访问ACCESS数据库(在线等待)
- 求Eclipse使用指南!!
- 很菜很菜的Cannot find ActionMappings or ActionFormBeans collection问题
还有最好将代码优化一下!
pstmt = con.prepareStatement("select k1.cc, k1.id from lksk k1 inner join lksk k2 on k1.cc=k2.cc where k1.czm=? and k2.czm=? and k1.jlxh<k2.jlxh and k1.lcdd<>k1.lcfd");
pstmt.setString(1, czm1);
pstmt.setString(2, czm2);改成
pstmt = con.prepareStatement("select k1.cc, k1.id from lksk k1 inner join lksk k2 on k1.cc=k2.cc where k1.czm='成都' and k2.czm='上海' and k1.jlxh<k2.jlxh and k1.lcdd<>k1.lcfd");
结果一下子就出来了。那位高手给个解释啊?
当然有的服务器对CMP做了优化可能效率会高一点,或者用hibernate,单机应用它比EJB好很多。
顺便问一句,BigDecimal id = rs.getBigDecimal("k1.id");中的k1.id不会有问题吗?
我访问字段一般不用别名
BigDecimal id = rs.getBigDecimal("id");
在System.out.println("done");就已经执行不下去了。返回集合不算大。几十条而已
这个应该是一个典型的JDBC问题,正如我问题所说,在数据有50多万条的情况下,用preparedstatement语句传参数运行sqlserver会长时间的占用cpu达到90%以上,且不出结果。当我把数据减到小于1万条时,运行正常。而另人奇怪的还在于在数据有50多万条的情况下,用jdbc:odbc进行连接时,直接把参数写进语句执行时,情况正常。传参数执行却错误
在我又用microsoft:jdbc进行连接时,无论直接把参数写进语句执行还是穿参数运行,都会长时间的占用cpu达到90%以上,且不出结果。
最后我只有在sqlserver中写了一个存储过程,语句相同。通过程序调用。运行正常。
所以我在想:因为jdbc的机制是将sql语句“翻译”成数据库能识别的语句。是不是在microsoft:jdbc和jdbc:odbc中对该语句的“解释”是否存在缺陷?本贴中午结,如果那位还有什么想法欢迎继续发表。
很慢的时候,你用DBCC MEMUSAGE看看然后你把它改成non clustered index再试试用DBCC MEMUSAGE看看给我结果,我再替你分析
<%
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
java.sql.Connection c = java.sql.DriverManager.getConnection("jdbc:odbc:test", "sa", "flying");
java.sql.PreparedStatement pstmt = c.prepareStatement("SELECT * FROM lksk k1 left JOIN lksk k2 ON k1.cc = k2.cc WHERE (k1.czm = ?) AND (k2.czm = ?)");
pstmt.setString(1, "成都");
pstmt.setString(2, "上海");
System.out.println("searching...");
java.sql.ResultSet rs = pstmt.executeQuery();
System.out.println("done");
%>
查询分析器执行
SELECT * FROM lksk k1 left JOIN lksk k2 ON k1.cc = k2.cc WHERE (k1.czm = '成都') AND (k2.czm = '上海')是不是啊?
现在就都没有反映了
你明白了没有???