ResultSetMetaData rsmd = rst.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
while(rst.next()){
  for(int i=0;i<numberOfColumns;){
    print(rsmd.getColumnName(i));
  }
}

解决方案 »

  1.   

    楼上的,不对,rst.next()这个循环还是不执行(System.out.println(rst.next());屏幕显示为false),我只想得到列的名字,你这样做是将列的所有信息都得到而以。关键是循环不执行,程序得到的结果是没有任何列存在。
    请继续讨论
      

  2.   

    想得到所有列名啊?那就把上面那个循环去掉呗:
    ResultSetMetaData rsmd = rst.getMetaData();
    int numberOfColumns = rsmd.getColumnCount();
    for(int i=0;i<numberOfColumns;i++){
    System.out.println(rsmd.getColumnName(i));
    }rst.next()不执行是因为你的表里面没有记录,列名不需要循环取。
      

  3.   

    老大,仍然不对。这样的现实结果为
    这样做得到了返回结果的元信息。显示如下,显然是不对的
    TABLE_CAT
    TABLE_SCHEM
    TABLE_NAME
    COLUMN_NAME
    DATA_TYPE
    TYPE_NAME
    COLUMN_SIZE
    BUFFER_LENGTH
    DECIMAL_DIGIT
    NUM_PREC_RADI
    NULLABLE
    REMARKS
    COLUMN_DEF
    SQL_DATA_TYPE
    SQL_DATETIME_
    CHAR_OCTET_LE
    ORDINAL_POSIT
    IS_NULLABLE
    //以下是源代码
    import java.sql.*;
    import java.util.*;
    public class ColumnExample
    {
    public static void main(String arg[])
    {
    try
    {
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    Properties p=new Properties();
    p.put("user","sa");
    p.put("password","wzhdxtx");
    Connection con=DriverManager.getConnection("jdbc:odbc:er",p);
    DatabaseMetaData db=con.getMetaData();
    ResultSet columns=db.getColumns("","DBA","test","");
    ResultSetMetaData rsmd=columns.getMetaData();
    int number=rsmd.getColumnCount();
    for (int i=1;i<number;i++)
    {
    System.out.println(rsmd.getColumnName(i));
    }
    /* while (columns.next())
    {
    System.out.println("kao");
    System.out.println(columns.getString(4));
    }*/
    }
    catch(SQLException e)
    {
    System.out.println(e.getMessage());
    }
    catch(Exception e)
    {
    System.out.println(e.getMessage());
    }
    }
    }
      

  4.   

    楼上的你搞错了, wbamos(编程好累)的意思是从头开始这样:
    Connection con=DriverManager.getConnection("jdbc:odbc:er","sa","wzhdxtx");
    Statement st = con.createStatement();
      ResultSet rs = st.execute("select * from tablename");
    得到resultset,不管是否有结果,然后再获取列名
      ResultSetMetaData rsmd = rs.getMetaData();
    int numberOfColumns = rsmd.getColumnCount();
    for(int i=0;i<numberOfColumns;i++){
    System.out.println(rsmd.getColumnName(i));
    }
      

  5.   

    谢谢楼上。
    这阳是没错。但我最初贴出来的这种方式也应该可以得到表中每列的信息的。为什么这样做却得不到了。奇怪。由是跟不同厂商的jdbc驱动有关吗
      

  6.   

    我照者你们说的是了一遍,为什么出错?connected to:jdbc:odbc:test Driver:JDBC-ODBC Bridge (SQLSRV32.DLL) version2.0001 (03.81.7430) 1Message[Microsoft][ODBC 驱动程序管理器] 无效的描述器索引 源代码如下:<%@ page import="java.sql.*" contentType="text/html; charset=gb2312" %>
    <html>
    <head>
    <title>
    Jdbcjsp1
    </title>
    </head>
    <body>
    <%
    try
    {
     String url=new String();
     url="jdbc:odbc:test";
     //加载jdbc-odbc brige驱动程序:
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
     //与url指定的数据源进行连接:
     Connection con=DriverManager.getConnection(url,"sa","03260908");
     //获得DatabaseMetaData对象,显示关于数据源的一些信息:
     DatabaseMetaData dma=con.getMetaData();
     out.println("connected to:" + dma.getURL());
     out.println("Driver:" + dma.getDriverName());
     out.println("version" + dma.getDriverVersion());
     //显示数据表中的内容:
     Statement stmt =con.createStatement();
     //PreparedStatement pstmt=con.prepareStatement(")
     String sql="select * from name";
     ResultSet rs=stmt.executeQuery(sql);
     ResultSetMetaData rsmd=rs.getMetaData();
     int numbersofcolumn=rsmd.getColumnCount();
     out.print("<br>");
     out.print(numbersofcolumn);
     out.print("<br>");
     for(int i=0;i<numbersofcolumn;i++)
     {
      out.print(rsmd.getColumnName(i));
     } while (rs.next())
     {
      String name=new String();
      name=rs.getString("name");
      out.println(name);
     }
     rs.close();
     stmt.close();
     con.close();
    }
    catch(SQLException ex)
    {
     out.println("Message" +ex.getMessage());
    }
    %>
    </body>
    </html>