用JDBC的话,怎么能得到SQL server的字段属性,包括名字,长度,是否主键??
网上好多SQL语句,如果我不想要用那些语句,还有没有别的方法得到??
试过ResultSet 里的一个getPrimaryKeys();~结果返回的长度是0.。。

解决方案 »

  1.   

    metadate!
    static void read(String sql, Object[] p) throws Exception {
    Connection conn = null;
    PreparedStatement ps = null;
    ResultSet rs = null;
    ps = conn.prepareStatement(sql);
    ParameterMetaData pmd = ps.getParameterMetaData();
    int count = pmd.getParameterCount();
    for (int i = 1; i <= p.length; i++) {
    System.out.print(pmd.getParameterClassName(i)+"\t");
    System.out.print(pmd.getParameterType(i)+"\t");
    System.out.println(pmd.getParameterTypeName(i));
    ps.setObject(i, p[i-1]); }
    rs = ps.executeQuery();
    }
    可能得到到你想要的那么多的项。
      

  2.   


    PreparedStatement ps = con.prepareStatement(sql);
    ResultSet rs = ps.executeQuery();
    ResultSetMetaData rsmd = rs.getMetaData();
    for (int i = 1; i <= rsmd.getColumnCount(); i++) {
    System.out.println(rsmd.getColumnName(i));//字段名称
    System.out.println(rsmd.getPrecision(i));//字段小数位数
    }
    DatabaseMetaData dmd = con.getMetaData();
    ResultSet rss = dmd.getPrimaryKeys(null, null, tableName);
    if (rss.next()) {
    System.out.println(rss.getString(4));//主键名称
    }
      

  3.   

    楼上的两位谢谢啦·~~不过我这里还是不能运行。显示的错误为
    java.sql.SQLException: No current row in the ResultSet.
    at net.sourceforge.jtds.jdbc.JtdsResultSet.getColumn(JtdsResultSet.java:282)
    at net.sourceforge.jtds.jdbc.JtdsResultSet.getString(JtdsResultSet.java:930)
    at cn.util.CreateXMLSql.outputElement(CreateXMLSql.java:112)
    at cn.util.CreateXMLSql.outputDatabaseToPath(CreateXMLSql.java:67)
    at cn.test.Test.main(Test.java:13)
    你们那能正常运行的吗??
      

  4.   

    到这一句rss.getString(4);时就出错了~~打印rss的长度。。为0.。。
      

  5.   

    getParameterMetaData()可以拿到
    另外用sql语句desc tablename也可以,只是需要自己解析结果而已,这是标准语法,各种数据库都支持
      

  6.   

    你的Object[] p是什么意思啊??
      

  7.   

    你的SQL语句是什么呢??能不能sql语句里不包括表名的啊??怎么我老是要像select * From test.dbo.student才能连上那个表啊?
      

  8.   

    desc tablename不行用SQL查询分析器也不行。
      

  9.   

    我用的sql语句是
    select * from tab_room where roomid = 222
    如果还不行,你试试以下方法:con = getConnection();
    String sql = "exec sp_pkeys tab_room";
    PreparedStatement ps = con.prepareStatement(sql);
    ResultSet rs = ps.executeQuery();
    if (rs.next()) {
    System.out.println(rs.getString("COLUMN_NAME"));
    }即调用SQL Server中的内置存储过程sp_pkeys, tab_room是表的名称
      

  10.   

    麻烦你能不能把整段代码包括连接数据库的发上来呢??
    我这里又出现:[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 'tab_room' 无效。
      

  11.   

    String sql = "exec sp_pkeys tab_room";  
    tab_room 是我这边的一个表名称,你要改为你那边的表名称
    我用的是这个包
    jtds-1.2.5.jar
    网上有下载的,这里传不了附件。
      

  12.   

    果然是我的驱动有问题~~太感谢Johnson_v1了·