数据库代码:select b.*,e.uid,e.ip,e.place,e.ctime,count(distinct e.uid) from edm.edm_open_56 e left join (select u.id,u.email from e_toemail u ) b on e.uid = b.id运行数据库代码的结果:

id      email                   uid     ip              place   ctime         count(distinct e.uid)
267 [email protected] 267 192.168.4.200 - LAN 1340011706 1

Java代码:public List<EmailOpenReturnInfoVO> findOpenInfo(Long taskId) {
List<EmailOpenReturnInfoVO> emailOpenReturnInfoVOs = new ArrayList<EmailOpenReturnInfoVO>();
String sql = "select b.*,e.uid,e.ip,e.place,e.ctime,count(distinct e.uid) from edm.edm_open_56 e left join (select u.id,u.email from e_toemail u ) b on e.uid = b.id";
PreparedStatement ps = null;
ResultSet rs = null;
EmailOpenReturnInfoVO vo = null;
Session session = null;
try {
session = this.sessionFactory.openSession();
ps = SessionFactoryUtils.getDataSource(session.getSessionFactory()).getConnection().prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
vo = new EmailOpenReturnInfoVO();
vo.setEmial(rs.getString("email"));
vo.setIp(rs.getString("ip"));
vo.setPlace(rs.getString("place"));
vo.setTime(new Date(rs.getInt("ctime")*1000L));
emailOpenReturnInfoVOs.add(vo);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if(null != session)
session.close();
}
return emailOpenReturnInfoVOs;
}运行最后的结果:id = null ,email = null ;也就是e_toemail表中的所有数据都为null,但是第一张表中的数据能正常获取,求解啊。急急急有能在线请教的吗?可以联系我的Q: 526673470

解决方案 »

  1.   

    运行下sql看看数据
    在vo打个断点、对比下
      

  2.   

    运行了SQL,sql是正确的,不是VO的问题,我设置了断点,获取:rs.getString("email") 的结果就是为NULL
      

  3.   

    取出来是null不就已经说明了问题么
    你在取出的数据的email字段后面加个别名  比如  a.email as email
    然后再看看
      

  4.   

    vo.setEmial(rs.getString("email"));把email转成大写试试
      

  5.   

    我很奇怪LZ的sql能执行?
    count是聚合函数,如果select中除了count以外还有其它非聚合的字段存在,比如LZ的b.*,e.uid等,那么后面没有group by的话应该就是非法的
      

  6.   

    谢谢热心的各位师兄,我已经解决了该问题。
    原来是:select u.id,u.email from e_toemail u 中,应该是:select u.id,u.email from edm.e_toemail u 当然,如果不加,在数据库中运行是完全没有问题的。但是在java中用spring注解一个数据源中跨数据库得必须加上。
      

  7.   

    LZ你简单试试这样的sql
    select u.uid, count(u.ip) from xxx
    看看能执行不?
      

  8.   


    我测试的语句:select u.uid, count(u.ip) from edm.edm_open_56 u结果:267 5谢谢,能通过。