首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

[JAVA100例] 第57例:JDBC 結果集元數據——ResultSetMetaData 獲取列信息

     編輯:Java 相關知識

本例演示使用 ResultSetMetaData 獲取查詢結果集的列級元數據:列數、列名、列類型、是否自增等。

核心代碼

public class JDBCResultMeta {
  private String url, username, password;

  public static void main(String[] args) {
    if (args.length != 4) { System.out.println("use: java JDBCResultMeta url username password tablename"); return; }
    JDBCResultMeta JRM = new JDBCResultMeta();
    JRM.url = args[0]; JRM.username = args[1]; JRM.password = args[2];
    JRM.getMeta(JRM.conn(), args[3]);
  }

  public Connection conn() {
    try {
      Class.forName("oracle.jdbc.driver.OracleDriver");
      return DriverManager.getConnection(url, username, password);
    } catch (Exception e) { ... return null; }
  }

  public void getMeta(Connection con, String table) {
    try {
      Statement Stm = con.createStatement();
      ResultSet rs = Stm.executeQuery("select * from " + table);
      ResultSetMetaData lineInfo = rs.getMetaData();

      System.out.println("*********************RESULT META Comment************************");
      int columnCount = lineInfo.getColumnCount();
      System.out.println("Column Count :" + columnCount);

      for (int i = 1; i < columnCount + 1; i++) {
        String columeName = lineInfo.getColumnName(i);
        String columeType = lineInfo.getColumnTypeName(i);
        boolean autocol = lineInfo.isAutoIncrement(i);
        System.out.println(columeName + " = " + columeType + " ::: " + autocol);
      }
    } catch (SQLException se) { se.printStackTrace(); }
    catch (Exception e) { System.out.println(e); }
    finally { try { con.close(); } catch (SQLException se) {} }
  }
}

ResultSetMetaData 核心方法

方法返回說明
getColumnCount()int結果集列數
getColumnName(int)String列名(可能為別名)
getColumnLabel(int)String列標籤(SELECT 別名或列名)
getColumnType(int)intJDBC 類型碼 (java.sql.Types)
getColumnTypeName(int)String數據庫特定類型名(如 VARCHAR2、NUMBER)
getPrecision(int)int精度(數字類型總位數)
getScale(int)int小數位數
isNullable(int)int可空性:columnNoNulls/columnNullable/columnNullableUnknown
isAutoIncrement(int)boolean是否自增列
getTableName(int)String所屬表名(視驅動支持)
getSchemaName(int)String模式名
getCatalogName(int)String目錄名

應用場景

  • 動態生成表單/報表(根據列類型選擇輸入組件)
  • 通用導出工具(CSV/Excel/JSON 自適應列)
  • ORM 框架自動映射實體屬性
  • 數據校驗規則生成(非空、精度、類型轉換)

注意事項

  1. 列索引從 1 開始(非 0)
  2. 需先執行查詢獲取 ResultSet,再調用 rs.getMetaData()
  3. 某些驅動對 getTableName 等支持有限,返回 null
  4. getColumnTypeName 返回數據庫原生類型,跨數據庫不可移植
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved