ResultSetMetaData使用实例

本例中使用ORACLE数据库,表CLASS结构如下:

例子代码如下:

  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.PreparedStatement;
  4. import java.sql.ResultSet;
  5. import java.sql.ResultSetMetaData;
  6. import java.sql.SQLException;
  7. class TestDemo {
  8.     public static Connection getConnection() {
  9.         Connection conn = null;
  10.         try {
  11.             Class.forName("oracle.jdbc.driver.OracleDriver");
  12.             String url = "jdbc:oracle:thin:@192.168.100.251:1521:cstar";
  13.             String user = "ticket";
  14.             String pass = "ticket";
  15.             conn = DriverManager.getConnection(url, user, pass);
  16.         } catch (ClassNotFoundException e) {
  17.             e.printStackTrace();
  18.         } catch (SQLException e) {
  19.             e.printStackTrace();
  20.         }
  21.         return conn;
  22.     }
  23.     public static void main(String[] args) {
  24.         Connection conn = getConnection();
  25.         String sql = "select * from class";
  26.         PreparedStatement stmt;
  27.         try {
  28.             stmt = conn.prepareStatement(sql);
  29.             ResultSet rs = stmt.executeQuery(sql);
  30.             ResultSetMetaData data = rs.getMetaData();
  31.             while (rs.next()) {
  32.                 for (int i = 1; i <= data.getColumnCount(); i++) {
  33.                     // 获得所有列的数目及实际列数
  34.                     int columnCount = data.getColumnCount();
  35.                     // 获得指定列的列名
  36.                     String columnName = data.getColumnName(i);
  37.                     // 获得指定列的列值
  38.                     String columnValue = rs.getString(i);
  39.                     // 获得指定列的数据类型
  40.                     int columnType = data.getColumnType(i);
  41.                     // 获得指定列的数据类型名
  42.                     String columnTypeName = data.getColumnTypeName(i);
  43.                     // 所在的Catalog名字
  44.                     String catalogName = data.getCatalogName(i);
  45.                     // 对应数据类型的类
  46.                     String columnClassName = data.getColumnClassName(i);
  47.                     // 在数据库中类型的最大字符个数
  48.                     int columnDisplaySize = data.getColumnDisplaySize(i);
  49.                     // 默认的列的标题
  50.                     String columnLabel = data.getColumnLabel(i);
  51.                     // 获得列的模式
  52.                     String schemaName = data.getSchemaName(i);
  53.                     // 某列类型的精确度(类型的长度)
  54.                     int precision = data.getPrecision(i);
  55.                     // 小数点后的位数
  56.                     int scale = data.getScale(i);
  57.                     // 获取某列对应的表名
  58.                     String tableName = data.getTableName(i);
  59.                     // 是否自动递增
  60.                     boolean isAutoInctement = data.isAutoIncrement(i);
  61.                     // 在数据库中是否为货币型
  62.                     boolean isCurrency = data.isCurrency(i);
  63.                     // 是否为空
  64.                     int isNullable = data.isNullable(i);
  65.                     // 是否为只读
  66.                     boolean isReadOnly = data.isReadOnly(i);
  67.                     // 能否出现在where中
  68.                     boolean isSearchable = data.isSearchable(i);
  69.                     System.out.println(columnCount);
  70.                     System.out.println("获得列" + i + "的字段名称:" + columnName);
  71.                     System.out.println("获得列" + i + "的字段值:" + columnValue);
  72.                     System.out.println("获得列" + i + "的类型,返回SqlType中的编号:"
  73.                             + columnType);
  74.                     System.out.println("获得列" + i + "的数据类型名:" + columnTypeName);
  75.                     System.out.println("获得列" + i + "所在的Catalog名字:"
  76.                             + catalogName);
  77.                     System.out.println("获得列" + i + "对应数据类型的类:"
  78.                             + columnClassName);
  79.                     System.out.println("获得列" + i + "在数据库中类型的最大字符个数:"
  80.                             + columnDisplaySize);
  81.                     System.out.println("获得列" + i + "的默认的列的标题:" + columnLabel);
  82.                     System.out.println("获得列" + i + "的模式:" + schemaName);
  83.                     System.out
  84.                             .println("获得列" + i + "类型的精确度(类型的长度):" + precision);
  85.                     System.out.println("获得列" + i + "小数点后的位数:" + scale);
  86.                     System.out.println("获得列" + i + "对应的表名:" + tableName);
  87.                     System.out.println("获得列" + i + "是否自动递增:" + isAutoInctement);
  88.                     System.out.println("获得列" + i + "在数据库中是否为货币型:" + isCurrency);
  89.                     System.out.println("获得列" + i + "是否为空:" + isNullable);
  90.                     System.out.println("获得列" + i + "是否为只读:" + isReadOnly);
  91.                     System.out.println("获得列" + i + "能否出现在where中:"
  92.                             + isSearchable);
  93.                 }
  94.             }
  95.         } catch (SQLException e) {
  96.             System.out.println("数据库连接失败");
  97.         }
  98.     }
  99. }

结果例子如下:

3
获得列1的字段名称:CLASS_NO
获得列1的字段值:111
获得列1的类型,返回SqlType中的编号:12
获得列1的数据类型名:VARCHAR2
获得列1所在的Catalog名字:
获得列1对应数据类型的类:java.lang.String
获得列1在数据库中类型的最大字符个数:10
获得列1的默认的列的标题:CLASS_NO
获得列1的模式:
获得列1类型的精确度(类型的长度):10
获得列1小数点后的位数:0
获得列1对应的表名:
获得列1是否自动递增:false
获得列1在数据库中是否为货币型:false
获得列1是否为空:0
获得列1是否为只读:false
获得列1能否出现在where中:true
3
获得列2的字段名称:CLASS_NAME
获得列2的字段值:111
获得列2的类型,返回SqlType中的编号:12
获得列2的数据类型名:VARCHAR2
获得列2所在的Catalog名字:
获得列2对应数据类型的类:java.lang.String
获得列2在数据库中类型的最大字符个数:10
获得列2的默认的列的标题:CLASS_NAME
获得列2的模式:
获得列2类型的精确度(类型的长度):10
获得列2小数点后的位数:0
获得列2对应的表名:
获得列2是否自动递增:false
获得列2在数据库中是否为货币型:false
获得列2是否为空:1
获得列2是否为只读:false
获得列2能否出现在where中:true
3
获得列3的字段名称:TEACHER_NO
获得列3的字段值:11
获得列3的类型,返回SqlType中的编号:12
获得列3的数据类型名:VARCHAR2
获得列3所在的Catalog名字:
获得列3对应数据类型的类:java.lang.String
获得列3在数据库中类型的最大字符个数:10
获得列3的默认的列的标题:TEACHER_NO
获得列3的模式:
获得列3类型的精确度(类型的长度):10
获得列3小数点后的位数:0
获得列3对应的表名:
获得列3是否自动递增:false
获得列3在数据库中是否为货币型:false
获得列3是否为空:1
获得列3是否为只读:false
获得列3能否出现在where中:true
3
获得列1的字段名称:CLASS_NO
获得列1的字段值:222
获得列1的类型,返回SqlType中的编号:12
获得列1的数据类型名:VARCHAR2
获得列1所在的Catalog名字:
获得列1对应数据类型的类:java.lang.String
获得列1在数据库中类型的最大字符个数:10
获得列1的默认的列的标题:CLASS_NO
获得列1的模式:
获得列1类型的精确度(类型的长度):10
获得列1小数点后的位数:0
获得列1对应的表名:
获得列1是否自动递增:false
获得列1在数据库中是否为货币型:false
获得列1是否为空:0
获得列1是否为只读:false
获得列1能否出现在where中:true
3
获得列2的字段名称:CLASS_NAME
获得列2的字段值:222
获得列2的类型,返回SqlType中的编号:12
获得列2的数据类型名:VARCHAR2
获得列2所在的Catalog名字:
获得列2对应数据类型的类:java.lang.String
获得列2在数据库中类型的最大字符个数:10
获得列2的默认的列的标题:CLASS_NAME
获得列2的模式:
获得列2类型的精确度(类型的长度):10
获得列2小数点后的位数:0
获得列2对应的表名:
获得列2是否自动递增:false
获得列2在数据库中是否为货币型:false
获得列2是否为空:1
获得列2是否为只读:false
获得列2能否出现在where中:true
3
获得列3的字段名称:TEACHER_NO
获得列3的字段值:22
获得列3的类型,返回SqlType中的编号:12
获得列3的数据类型名:VARCHAR2
获得列3所在的Catalog名字:
获得列3对应数据类型的类:java.lang.String
获得列3在数据库中类型的最大字符个数:10
获得列3的默认的列的标题:TEACHER_NO
获得列3的模式:
获得列3类型的精确度(类型的长度):10
获得列3小数点后的位数:0
获得列3对应的表名:
获得列3是否自动递增:false
获得列3在数据库中是否为货币型:false
获得列3是否为空:1
获得列3是否为只读:false
获得列3能否出现在where中:true
3
获得列1的字段名称:CLASS_NO
获得列1的字段值:333
获得列1的类型,返回SqlType中的编号:12
获得列1的数据类型名:VARCHAR2
获得列1所在的Catalog名字:
获得列1对应数据类型的类:java.lang.String
获得列1在数据库中类型的最大字符个数:10
获得列1的默认的列的标题:CLASS_NO
获得列1的模式:
获得列1类型的精确度(类型的长度):10
获得列1小数点后的位数:0
获得列1对应的表名:
获得列1是否自动递增:false
获得列1在数据库中是否为货币型:false
获得列1是否为空:0
获得列1是否为只读:false
获得列1能否出现在where中:true
3
获得列2的字段名称:CLASS_NAME
获得列2的字段值:333
获得列2的类型,返回SqlType中的编号:12
获得列2的数据类型名:VARCHAR2
获得列2所在的Catalog名字:
获得列2对应数据类型的类:java.lang.String
获得列2在数据库中类型的最大字符个数:10
获得列2的默认的列的标题:CLASS_NAME
获得列2的模式:
获得列2类型的精确度(类型的长度):10
获得列2小数点后的位数:0
获得列2对应的表名:
获得列2是否自动递增:false
获得列2在数据库中是否为货币型:false
获得列2是否为空:1
获得列2是否为只读:false
获得列2能否出现在where中:true
3
获得列3的字段名称:TEACHER_NO
获得列3的字段值:11
获得列3的类型,返回SqlType中的编号:12
获得列3的数据类型名:VARCHAR2
获得列3所在的Catalog名字:
获得列3对应数据类型的类:java.lang.String
获得列3在数据库中类型的最大字符个数:10
获得列3的默认的列的标题:TEACHER_NO
获得列3的模式:
获得列3类型的精确度(类型的长度):10
获得列3小数点后的位数:0
获得列3对应的表名:
获得列3是否自动递增:false
获得列3在数据库中是否为货币型:false
获得列3是否为空:1
获得列3是否为只读:false
获得列3能否出现在where中:true

猜你喜欢

转载自chenyajie.iteye.com/blog/1855143