不嫌麻烦的话可以先用SQL得到数据集的列数
 select count(*) sometable where xxx=xxx又或者可以用ResultSet的getRow()方法得到数量,返回一个INT类型用序号操作其实每个ResultSet getXXX方法都支持比如:
 String getString(int columnIndex) 
   String getString(String columnName) 明白?还用再详细说明吗?

解决方案 »

  1.   

    你在写SQL时就应该知道取多少列呀。
      

  2.   

    如果是别人写的Sql呢,我是想做一个bean,将这些操作封装,大家都可以用
      

  3.   

    你可以多传一个参数,说明sql的列数。
      

  4.   

    用sql倒是个办法,但是ResultSet对象是不是应该提供这个方法,ResultSet的功能太弱了。难道没有在数据集里取列数的方法吗?
      

  5.   

    得到数据集的列数简单:
    Statement stmt = con.createStatement();
    ResultSet rs = stmt.executeQuery(query);
    ResultSetMetaData rsmd = rs.getMetaData();

    cols = rsmd.getColumnCount();通过序号操作数据集不是很方便。给你一个例子参考:import java.io.*;
    import java.util.*;
    import java.sql.*;public class JDBCBean {    String classname ; // JDBC driver class
        String url ; 
        String username ;
        String password ;
        String query ;  // the SQL statement.
        int rows, cols; // the number of rows and columns of the result.
        Vector result;    public void setClassname(String classname) {
    this.classname = classname;
        }    public String getClassname() {
    return classname;
        }    public void setUrl(String url) {
    this.url = url;
        }    public String getUrl(){
    return url;
        }    public void setUsername(String username) {
    this.username = username;
        }    public String getUsername() {
    return username;
        }    public void setPassword(String password) {
    this.password = password;
        }    public String getPassword() {
    return password;
        }    public void setQuery(String query) {
    this.query = query;
        }    public String getQuery() {
    return query;
        }    protected void go() 
    throws ClassNotFoundException, SQLException
        { // Load the JDBC driver
    Class.forName(classname); 

    // get the connection to the database
    Connection con = DriverManager.getConnection(url, username, 
         password);
        
    // create and execute the query
    Statement stmt = con.createStatement();
    ResultSet rs = stmt.executeQuery(query);
    ResultSetMetaData rsmd = rs.getMetaData();

    cols = rsmd.getColumnCount();
    rows = 0;
    result = new Vector();

    String s[] = new String[cols];
    for (int i=1; i<=cols; i++) {
        s[i-1] = rsmd.getColumnLabel(i) ;
    }
    result.addElement(s);
    rows ++;

    // for entire data
    while (rs.next()) {
        s = new String[cols];
        // for one row
        for (int i=1; i<=cols; i++) {
    s[i-1] = helper(rs, rsmd.getColumnType(i), i);
        }
        result.addElement(s);
        rows ++;
    }
        }
    public static void main (String[] args) 
        {
    JDBCBean jdbcBean = new JDBCBean();
    String classname = "com.imaginary.sql.msql.MsqlDriver";
    //String url = "jdbc:msql://gaby.eng:4333/demo";
    String url = "jdbc:msql://ridgetop.eng:1114/test";
    String username = "lfu";
    String password = "password";
    //String query = "select * from details";
    String query = "select * from table1"; jdbcBean.setClassname(classname);
    jdbcBean.setUrl(url);
    jdbcBean.setUsername(username);
    jdbcBean.setPassword(password);
    jdbcBean.setQuery(query);

    try {
        jdbcBean.go();
        System.out.println("Seems okay");
    } catch (Exception ex) {
        ex.printStackTrace();
    }
        }

        //
        // Result methods
        //    public int getColumnCount() {
    return cols;
        }    public int getRowCount() {
    return rows;
        }    public String getColumnLabels(int col) {
    String[] s = (String[])result.firstElement();
    return s[col];
        }    public String getCell(int col, int row) {
    String[] s = (String[])result.elementAt(row);
    return s[col];
        }
        protected String helper (ResultSet rs, int dataType, int col) 
    throws SQLException
        {
    String retVal = null;
    Integer intObj; // ask for data depending on the datatype
    switch(dataType) {
    case Types.DATE:
        java.sql.Date date = rs.getDate(col);
        retVal = date.toString();
        break;
    case Types.TIME:
        java.sql.Time time = rs.getTime(col);
        retVal = time.toString();
        break;
    case Types.TIMESTAMP:
        java.sql.Timestamp timestamp = rs.getTimestamp(col);
        retVal = timestamp.toString();
        break;
    case Types.CHAR:
    case Types.VARCHAR:
    case Types.LONGVARCHAR:
        retVal = rs.getString(col);
        break;
    case Types.NUMERIC:
    case Types.DECIMAL:
        java.math.BigDecimal numeric = rs.getBigDecimal(col, 10);
        retVal = numeric.toString();
        break;
    case Types.BIT:
        boolean bit = rs.getBoolean(col);
        Boolean boolObj = new Boolean(bit);
        retVal = boolObj.toString();
        break;
    case Types.TINYINT:
        byte tinyint = rs.getByte(col);
        intObj = new Integer(tinyint);
        retVal = intObj.toString();
        break;
    case Types.SMALLINT:
        short smallint = rs.getShort(col);
        intObj = new Integer(smallint);
        retVal = intObj.toString();
        break;
    case Types.INTEGER:
        int integer = rs.getInt(col);
        intObj = new Integer(integer);
        retVal = intObj.toString();
        break;
    case Types.BIGINT:
        long bigint = rs.getLong(col);
        Long longObj = new Long(bigint);
        retVal = longObj.toString();
        break;
    case Types.REAL:
        float real = rs.getFloat(col);
        Float floatObj = new Float(real);
        retVal = floatObj.toString();
      break;
    case Types.FLOAT:
    case Types.DOUBLE:
      double longreal = rs.getDouble(col);
      Double doubleObj = new Double(longreal);
      retVal = doubleObj.toString();
      break;
    case Types.BINARY:
    case Types.VARBINARY:
    case Types.LONGVARBINARY:
      byte[] binary = rs.getBytes(col);
      retVal = new String(binary);
      break;
    }
    return retVal;    }

    }
      

  6.   

    楼上说的是一种方法,还可以自己写一种方法,用来返回记录的个数。
    先查询结果,然后在FOR循环中进行I++运算,最后把I返回就是记录的个数了。