日期:2014-05-18  浏览次数:20699 次

请问下JAVA+Sqlserve 2000 的问题
以前都是用ORACL 现在有需要转用Sqlserve 2000,

突然间发现使用 Sqlserve 2000 进行查询,会出现这样的情况 不知道大家有没遇见过,或许会有解决办法

public List DeptUser(Integer deptid)
{
Session ss= null;
List l = null ;
try {
ss = DBcon.getSession("hibernate_connection_factory");
String hql = "FROM DeptUser as s WHERE s.deptID="+deptid+"" ;
Query q = ss.createQuery(hql) ;
l = q.list() ;
}catch(Exception e) {
e.printStackTrace();
}finally{
if (ss != null) {
ss.close();
}
}
return l ;
}
比如说这样一个方法 ,查询表DeptUser 并把符合要求的值存入List,但是奇怪的现象出现了,存入List的数据始终只有第一条

假如有10条符合要求的数据,List.size()确实是10没错,但是每条数据都是第一条,好像是游标没往下走

请问大家遇见过这样的情况嘛,解决办法是??

网上有说是驱动的问题 我用的是com.microsoft.jdbc.sqlserver.SQLServerDriver 或者改成JTDS的驱动也不行 是不是需要加什么配置?

请大家帮帮忙 急需!!!!



------解决方案--------------------
你用的hibernate,看看hibernate有问题没哦。
------解决方案--------------------
比较郁闷呢
ss = DBcon.getSession("hibernate_connection_factory"); 
获得session的方法怎么还带参数
有些ide不是自动能创建session的工厂方法.调用就可以了
我试了的怎么可以呢?
------解决方案--------------------
取值的代码呢,拿出来看看。 看你hibernate查询部分代码都挺正常的
------解决方案--------------------
FROM DeptUser as s WHERE s.deptID="+deptid+;
传换为标准sql在在客户端查查看看,看看你的sql语句正确与否。
------解决方案--------------------
探讨
跟取值的代码应该没关系 在执行这个方法的时候 存入List里的值就是同一个值

------解决方案--------------------
<property name="show_sql">true</property>
把SQL打印出来在查询分析器里看看。。。
------解决方案--------------------
String hql = "FROM DeptUser as s WHERE s.deptID="+deptid+"" ; 
Query q = ss.createQuery(hql) ; 

如果deptID是 varchar的话
String hql = "FROM DeptUser as s WHERE s.deptID='"+deptid+"'" ; 
-----
或者你这样试试---
String hql = "FROM DeptUser as s WHERE s.deptID=:deptid" ;
Query q = ss.createQuery(hql) ; 
q.setParameter("deptid", deptid)
l = q.list() ; 
---------如果这样都不行的话..
我怀疑是你查出来后取值的问题了!
------解决方案--------------------
这样看来是没有错了,照楼主说的,list.size()=10;
应该是你取值的问题,有一次我同学在取值的时候把while()写成了if()
楼主好好检查下,应该是取值的问题。
------解决方案--------------------
第三,在服务端打印的每条list的唯一值确实是一样的

每条记录的唯一值都一样,看来是存入list时出了问题(唯一值不一样才是对的)
不明白为什么了。。。
------解决方案--------------------
可能:
obj =new Obj();
while(...){
obj=...
list.add(obj);
}
list 有n个一样的