最新消息:发现真没时间折腾VPS,最近又换了个空间。呵呵

JDBC通过DatabaseMetaData读取表结构

最近在做一个系统,要求把Access数据读取到Oracle里。在读取之前要Check表的列属性是否正确。在网上查了一下,发现Java本身提供的DatabaseMetaData类就可以实现所有的功能。

我们要用到的函数是DatabaseMetaData.getColumns。它的定义如下面的代码,其中catalog一般不用设置(设为NULL),schemaPattern和tableNamePattern以及columnNamePattern表示你要取的schema和表名以及列的检索方法,可以使用通配符下划线和百分号,NULL表示显示所有。

Java
ResultSet getColumns(String catalog, String schemaPattern,
        String tableNamePattern, String columnNamePattern) throws SQLException;

取得的ResultSet的结构如下(只列了一部分,详细的可以看JDK文档

列名 类型 => 说明
TABLE_NAME String => 表名
COLUMN_NAME String => 表名
DATA_TYPE int => SQL类型,这个是数字
TYPE_NAME String => SQL类型名
COLUMN_SIZE int => 列长
DECIMAL_DIGITS int => 小数位长
NULLABLE int => 能否为空
REMARKS String => 列注释

测试代码如下:

Java
public static void getAllColumn(Connection conn, String tableName) throws SQLException {
	DatabaseMetaData metaData = conn.getMetaData();
	ResultSet rs = metaData.getColumns(null, "YUTUO", tableName, null);

	while (rs.next()) {
		String colName = rs.getString("COLUMN_NAME");
		System.out.println("==============" + colName + "===============");
		System.out.println("Column Name: " + colName);
		System.out.println("Column Type: " + rs.getString("DATA_TYPE"));
		System.out.println("Column Type Name: " + rs.getString("TYPE_NAME"));
		System.out.println("Column Size: " + rs.getString("COLUMN_SIZE"));
		System.out.println("Column Decimal Digits: " + rs.getString("DECIMAL_DIGITS"));
		System.out.println("Column Nullable: " + rs.getString("NULLABLE"));
	}
}

转载请注明:宇托的狗窝 » JDBC通过DatabaseMetaData读取表结构

发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址