问题描述
做一查询系统(struts2+myeclipse+tomcat+oracle9),一般先在pl/sql中测试sql语句,无问题后在action中使用oracle thin模式连接数据库,执行sql语句,然后将查询结果存入HashMap后输出至jsp页面。出现如下怪异问题:1、在pl/sql中测试sql语句时结果正常。结果中有6个字段,其中两个字段为count()函数统计出的数值。2、将在pl/sql中测试过的sql语句写入struts2的action中,通过jdbc thin模式执行,查询结果与pl/sql中测试结果不一致。count()函数统计的那两个字段的值不一致,暂未发现规律。数值接近,互有高低。在struts2的action中执行sql语句前,先打印sql语句,打印语句与pl/sql中测试语句一样,查询结果一致。在action中执行sql语句后在将rs(RecordSet)存入HashMap前,输出rs内容,count()统计出的数值结果已经不一致。该系统中类似查询功能有几个,实现方式方法相同,唯独这个出现pl/sql和jdbc执行同一句sql结果后部分字段数值不一致的诡异情况!烦请大家帮助分析、支招!不胜感激!! 问题补充:lang_tu 写道
解决方案
pl/sql查询和jdbc查询,使用相同的排序方式...分析下结果不同之处,你也可以贴出来看看,帮你分析一下。
解决方案二:
我也碰到类似的问题了,在SQL Developer中执行sql和用Java JDBC执行结果不一样。后来查的原因是:我在SQL Developer中进行过insert,但没有手动commit,导致数据实际并未存储到数据库中。后来commit之后,就没问题了。SQL Developer不会自动commit,很不习惯!!
解决方案三:
type Exception report ??
解决方案四:
我也感到很奇怪,希望LZ解决后把解决方法贴出来,我看到你里面用rs = stmt.executeQuery(sql); 你换用preparedstatement来查询
解决方案五:
是不是pl/sql有事务没有提交?pl/sql内查询是同一个事务。而struts2的action中,通过jdbc thin模式执行不是同一事务,所以结果不一样
解决方案六:
是的一般以代码为准,有差别的话,pl/sql里面直接to_char 一把
解决方案七:
是挺奇怪的,关注一下,想说的都被上面兄弟说了
解决方案八:
印象中 count 统计出来的是个oracle int 类型.貌似转换到 java 的 Stirng 得仔细下.忘了.LZ仔细看看吧.
解决方案九:
找你们的DBA把 HOLD_CURSOR和 RELEASE_CURSOR两个参数重新设置一下。另外,硬件允许的话,再把ORACLE内存优化一下。
解决方案十:
引用java.sql.SQLException: ORA-01003: ?????????为什么后面是???????贴SQL语句
解决方案十一:
会不会是你pl/sql查询的table和jdbc查询的table根本不是一个table,但是是同名的,表空间不同。这个问题碰到过,纠结了很久,不知道能不能帮助你。
解决方案十二:
向HashMap里存值时,键相同的值会被覆盖,比如:Map map = new HashMap();map.put("1", "1");map.put("1", "211");System.out.println("长度="+map.size()" 值="+map.get("1"));打印结果:长度=1 值=211因此你jsp页面显示的值可能会比sql语句查询的少