本例演示使用 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) {} }
}
}
| 方法 | 返回 | 說明 |
|---|---|---|
getColumnCount() | int | 結果集列數 |
getColumnName(int) | String | 列名(可能為別名) |
getColumnLabel(int) | String | 列標籤(SELECT 別名或列名) |
getColumnType(int) | int | JDBC 類型碼 (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 | 目錄名 |
rs.getMetaData()getTableName 等支持有限,返回 nullgetColumnTypeName 返回數據庫原生類型,跨數據庫不可移植