public ResultSet getRes(String id){
   DBAccess db=DBAccess.getInstance();//数据库连接
    String sql= "select " +
            "title_id, " +
            "board_id, " +
            "title, " +
                "t_content, " +
            "(select count(id) from Reply where id=Title_info.title_id) as reply_count " +
            "from Title_info "+
            "where board_id='"+id+"'";
     ResultSet rst = db.sendQuery(sql);  //查询操作
     return rst;
    }上面是一个bean里的获取一个数据集的函数, 在eclipse里调试的时候显示rst始终为空(数据库连接一定没问题),
是不是SQL语句的语法问题啊,但我在查询分析器里测试了这个sql语句,有结果的~ 帮帮忙啊,看了好长时间都没发现什么.

解决方案 »

  1.   

    在eclipse里调试的时候显示rst始终为空
    -----------------------
    这个怎么判断为空的?另:
    不报错?打印下sql语句看看
    这段代码应该没问题吧~
      

  2.   

    你可以在程序里面打个断点,跟踪看看变量sql的内容,把它复制到查询分析器里面执行一下,看看是否是语句问题,多半可能是你的sql中有的地方没有空格
      

  3.   

    是的啊,rst为null,我把这个sql语句换成其他的 rst里就正常了,  报错是报空指针了,那是后来用到rst报的
      

  4.   

    把你sql语句中多余的空格去掉试试看  比如
    "select " +
    "title_id, " +
    "board_id, " + 
    ----------------------》
    "select " +
    "title_id," +
    "board_id," + 列名逗号后的空格去掉试试
    不过这个应该不影响啊,lz还是打印输出下看看,然后用打印出的语句放入查询分析器执行
      

  5.   

    把SQL打印出来,放到查询分析器里运行就知道问题在哪里了!可能是空格的问题,也可能是字段名写错.
      

  6.   

    给你个建议吧:把你的sql改成:"select * from Title_info" 看看返回的rst是否为空?
    如果不为空就是你sql的问题,如果不是就是你程序有问题.
    而且 在函数里你应该捕获异常啊.
      

  7.   

    对,8楼的朋友,我换成了"select * from Title_info"rst不为空,
    但就是找不出这个sql语句有什么问题.
      

  8.   

    "(select count(id) from Reply where id=Title_info.title_id) as reply_count "
    最后发现只要把上面这个字段去了rst就不为空, 但是整个sql语句在控制台中打印出来,再到查询分析器里运行,是我预期的结果啊~
    我是不是撞鬼了啊,怎么会这样
      

  9.   

    不知道大家遇到过这种情况没,
    说sql语句是错的,但在查询分析器里运行正常, 说程序有问题,但换其他的sql语句程序运行正常,
    我真的是找不出还有其他原因来解释这个了,大家说说看还有其他什么可能性会获取不到数据集的,以前遇到问题自己慢慢调试还可以出来,但这次....
      

  10.   

    好像是没问题啊,要不你尝试定义个Statement,用rs=stmt.executeQuery(sql)
      

  11.   

    "(select count(id) from Reply where id=Title_info.title_id) as reply_count "  
    改为 "(select count(id) from Reply where id=title_id) as reply_count " 
    试下看
      

  12.   

    出现这种情况大多数的原因应该是组装SQL语句的时候某2个字段或字符串之间少了空格的原因,呵呵
    以前遇到过。但看LZ的代码中貌似没此类问题,呵呵
      

  13.   

    ResultSet rst = db.sendQuery(sql);  //查询操作
    sql应该没有问题,看看你这里面是否因为抛出异常而return null了?
    还要注意id的参数!(如果传这样的呢? a'f )用PreparedStatement代替Statement的拼接要方便许多,还防注入。
      

  14.   

    到sendQuery里去看看,可以否?
      

  15.   

    public ResultSet sendQuery(String sql) {
               ResultSet rs;
        try {
        rs = m_stmt.executeQuery(sql);
        System.out.println("查询操作....");
        return rs;
     } catch (SQLException e) {
     e.printStackTrace(); 
     return null;        //我在这打了个断点因为异常而return了null
     }
     }谢谢bootupnow的提醒啊,id我看了里面是正确的,上面就是DBAccess类里sendQuery函数的内容,下面是报错的关键内容,不知道是什么原因java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]'title_idcount' 不是可以识别的 函数名。
    at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
    at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)最近也是刚学着做简单的BBS. 不知道我上面表达清楚了没,还望多指教啊~
      

  16.   

    打印sql语句来看,怎么会有个title_idcount??这个东西是列名还是函数?存在否?
    仔细检查之。
      

  17.   

    LZ,把select count(id) from Reply where id=Title_info.title_id) as reply_count
    改成select count(Reply.id) from Reply,Title_info where Reply.id=Title_info.title_id) as reply_count
    试试
      

  18.   

    sql问题,  maybe
    谢谢bootupnow ,jiaping108和其他朋友的解答~