sql语句大概是这样:select *,a,b from table。用MetaData.getColumnCount()获取rs的字段个数居然是3。好奇怪,不应该是table的字段个数+2吗?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【woodfans】截止到2008-07-11 13:55:09的历史汇总数据(不包括此帖):
    发帖的总数量:14                       发帖的总分数:660                      每贴平均分数:47                       
    回帖的总数量:20                       得分贴总数量:4                        回帖的得分率:20%                      
    结贴的总数量:10                       结贴的总分数:440                      
    无满意结贴数:4                        无满意结贴分:320                      
    未结的帖子数:4                        未结的总分数:220                      
    结贴的百分比:71.43 %               结分的百分比:66.67 %                  
    无满意结贴率:40.00 %               无满意结分率:72.73 %                  
    楼主加油
      

  2.   

    普通的table,字段大概有十来个吧
      

  3.   

    不会吧,楼主用个简单的代码来看看。
        // 驱动是jdbc for mssql server 2005的
        public static void doTest(){
            Connection conn = null;
            PreparedStatement pstmt = null;
            ResultSet rst = null;
            ResultSetMetaData rstMetaData = null;
            try {
                Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                conn = DriverManager.getConnection(
                        "jdbc:sqlserver://localhost:1433;DatabaseName=test", "username",
                        "password");           
                pstmt = conn.prepareStatement("SELECT *,col1,col2 FROM tableName");
                rst = pstmt.executeQuery();
                rstMetaData = rst.getMetaData();
                // 打印列名来看看
                for(int i=1;i<=rstMetaData.getColumnCount();i++){
                    System.out.println(rstMetaData.getColumnName(i));
                }
            } catch (ClassNotFoundException e) {
                e.printStackTrace();          
            } catch (SQLException e) {
                e.printStackTrace();
            } finally{
                if (rst != null){
                    try {
                        rst.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                
                if (pstmt != null){
                    try {
                        pstmt.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                
                if (conn != null){
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }        
        }    
      

  4.   

    这事打印出来的日志记录:
    ****执行sql语句****  SELECT query.*,0 AS SENDTYPE ,pdate,CONVERT(varchar, pdate, 120) AS CREATE_DATE FROM QUERY WHERE taskassignoper ='201' and status='未接受' and pdate>=(select dateadd(m,-1,getdate())) order by pdate desc
    ****查询结果集字段个数**** 4
    ****查询结果集记录数**** 2
    ResultList = {id=748, customerid=847, oper=6001, orderid=CX20080707-00000006}
    ResultList = {id=747, customerid=844, oper=6001, orderid=CX20080707-00000005}
      

  5.   

    很奇怪的现象,假如我把sql换成seleect * from table这样取得的字段个数是没错的
      

  6.   

    SELECT *,col1,col2 FROM tableName 为什么要这样写啊SELECT * FROM tableName 不就可以了  等答案同问题
    欢迎来
    我们的java世界ourjavasky 针对层次不同量身学习java技术
    http://www.ourjavasky.cn
      

  7.   

    是这样的。我需要对字段a,b做点小处理,譬如说日期的截取,但是我又不想在sql里写那么多字段。所有就这样写了
      

  8.   

    SELECT query.*,0 AS SENDTYPE ,pdate,CONVERT(varchar, pdate, 120) AS CREATE_DATE FROM QUERY 
    你的query表有几个字段?只有1个pdate吧,如果是1个字段,结果就是对的。
      

  9.   

    简单来说
    他把你那*当作一个字段
    而不是所有字段
    用MetaData.getColumnCount()获取rs的字段个数居然是3
    你看你查的是放在rs里面的元素个数,rs里面就是3个了   *  a  b  
    你如果想把*里面的字段分开计算的话,改查你那rs的返回类型(一般都是list吧)的集合个数好了
      

  10.   

    完整的 SQL 语句什么样?再有楼主什么数据库?
      

  11.   


    ****执行sql语句****  SELECT query.*,0 AS SENDTYPE ,pdate,CONVERT(varchar, pdate, 120) AS CREATE_DATE FROM QUERY WHERE taskassignoper ='201' and status='未接受' and pdate>=(select dateadd(m,-1,getdate())) order by pdate desc 
    ****查询结果集字段个数**** 4 
    ****查询结果集记录数**** 2 
    ResultList = {id=748, customerid=847, oper=6001, orderid=CX20080707-00000006} 
    ResultList = {id=747, customerid=844, oper=6001, orderid=CX20080707-00000005}
    用的是sqlserver 2000
      

  12.   

    问题解决了,我把prepareStatement方法的第3个参数,也就是ResultSet的并发参数改成:CONCUR_READ_ONLY就正常了。原先是:CONCUR_UPDATABLE。不过还是没明白这个问题是怎么产生的,有没有人来解释下