`
ezerg
  • 浏览: 268923 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

JDBC 中 DatabaseMetaData 接口的使用

阅读更多
    简单介绍一下 java.sql.DatabaseMetaData 接口,关于数据库的整体综合信息。官方 API 文档已经介绍很详细,我这里简单说一下实际的使用。
    它还存在一系列的以 supports 开头的接口也比较实用,例如 supportsBatchUpdates() 获取此数据库是否支持批量更新,还有 supportsTransactions() 获取此数据库是否支持事务等等。
    实现的功能很简单,就是根据数据库中的表自动生成相对应的 Java Bean 文件。
    主要思路是先得到数据库中所有表,再得到每张表的所有字段,如果是主健字段则特殊标记一下。
主要用到几个接口:
ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types)
          获取可在给定类别中使用的表的描述。
ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern)
          获取可在指定类别中使用的表列的描述。
ResultSet getPrimaryKeys(String catalog, String schema, String table)
          获取对给定表的主键列的描述。
ResultSet getExportedKeys(String catalog, String schema, String table)
          获取引用给定表的主键列(表导入的外键)的外键列的描述。
          
     // 取得数据库中所有表名称
	public List getTables() {
		List tables = new ArrayList();
		Connection con = null;
		ResultSet rs = null;
		try {
			con = DbUtils.getConnection("jwdt");
			rs = con.getMetaData().getTables(null, null, null, new String[] { "TABLE" });
			while (rs.next()) { // 注意:结果集中存在表的很多信息,表名称在第 3 列
				tables.add(rs.getString(3));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DbUtils.close(con);
		}
		return tables;
	}

     // 根据表名称取得表所有字段
	public List getColumns(String table) {
		List columns = new ArrayList();
		Connection con = null;
		ResultSet rs = null;
		try {
			con = DbUtils.getConnection("jwdt");
			rs = con.getMetaData().getColumns(null, null, table, null);
			while (rs.next()) { // 注意:结果集中存在表的很多信息,字段名称在第 4 列
				columns.add(rs.getString(4));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DbUtils.close(con);
		}
		return columns;
	}
	
     // 根据表名称取得表主键字段
     // 取得表外键字段的操作使用 getExportedKeys(null, null, table) 方法
	public String getPrimaryKeys(String table) {
		String keys = "";
		Connection con = null;
		ResultSet rs = null;
		try {
			con = DbUtils.getConnection("jwdt");
			rs = con.getMetaData().getPrimaryKeys(null, null, table);
			while (rs.next()) {// 注意:结果集中存在表的很多信息,字段名称在第 4 列
				keys += rs.getString(4) + ",";
			}
			if (!keys.equals("")) { // 去掉最后面的逗号
				keys = keys.substring(0, keys.length() - 1);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DbUtils.close(con);
		}
		return keys;
	}

生成类属性的时候,还要注意数据库表字段的类型与 Java 类型的对应,最好多加一个方法作类型转换。
生成类文件的方式,建议使用类似 FreeMarker 的模板语言,直接写在 Java 类中代码太难看了。


1
0
分享到:
评论
2 楼 ezerg 2012-06-04  
兄弟,你那样写的效果和没写是一样的,因为你没有转换编码。例如从数据库存储的是ISO-8859-1,而页面显示是GBK,则应该是 new String(rs.getString().getBytes("ISO-8859-1"),"GBK")
1 楼 yl419440513 2012-05-04  
我也用的是这个,可是却被一个问题难住了,就是getString获取列名称表名称的时候会出现中文名称乱码的情况。我用了new String(rs.getString().getBytes())也是没有效果不知道谁知道呢

相关推荐

    JDBC元数据操作--DatabaseMetaData接口Demo

    DatabaseMetaData和ResultSetMetaData就是两个常用的获取数据库元数据相关信息的接口,本文只讲解DatabaseMetaData接口获取元数据的方法。 文章地址:http://blog.csdn.net/chen_zw/article/details/18816599

    DatabaseMetaDate接口

    DatabaseMetaData 接口作为整体提供有关数据库的综合信息。

    java 查询oracle数据库所有表DatabaseMetaData的用法(详解)

    下面小编就为大家带来一篇java 查询oracle数据库所有表DatabaseMetaData的用法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    jdbc基础和参考

    ORM:使用元数据信息来描述对象和数据库之间的关系,并且能够自动实现java中持久化对象到关系型数据库中表的映射 脏检查:自动对缓存中的数据进行检查,并且选择在合适的时机和数据库之间进行交互,以保持数据的...

    数据库原理网上授课平台(二).doc

    利用DatabaseMetaData接口提供关于DBMS的描述性信息,从而使应用程序能适应每个DBMS。  b.可在现有数据库上实现。  c.提供与其它Java系统一致的界面。这说明开发人员可以采用一致的编程界面来处理数据库编程。  d...

    数据库原理网上授课平台(一).doc

    利用DatabaseMetaData接口提供关于DBMS的描述性信息,从而使应用程序能适应每个DBMS。  b.可在现有数据库上实现。  c.提供与其它Java系统一致的界面。这说明开发人员可以采用一致的编程界面来处理数据库编程。  d...

    c++ 连接 mysql 官方文档

    Accessing Database Metadata ?Accessing Parameter Metadata from a PreparedStatement Object ?Catching Exceptions ?Debug Tracing with MySQL Connector/C++ ?For More Information ?About the author ?Appendix...

    Java数据库编程宝典2

    第2部分 在两层客户/服务器结构中使用JDBC和SQL 第5章 使用JDBC和SQL创建表 5.1 创建数据库 5.2 使用表 5.2.1 记录和字段、行和列 5.2.2 SQL数据类型 5.2.3 完整性约束 5.3 创建表 5.4 使用JDBC创建表 ...

    Java数据库编程宝典4

    第2部分 在两层客户/服务器结构中使用JDBC和SQL 第5章 使用JDBC和SQL创建表 5.1 创建数据库 5.2 使用表 5.2.1 记录和字段、行和列 5.2.2 SQL数据类型 5.2.3 完整性约束 5.3 创建表 5.4 使用JDBC创建表 ...

    Java数据库编程宝典1

    第2部分 在两层客户/服务器结构中使用JDBC和SQL 第5章 使用JDBC和SQL创建表 5.1 创建数据库 5.2 使用表 5.2.1 记录和字段、行和列 5.2.2 SQL数据类型 5.2.3 完整性约束 5.3 创建表 5.4 使用JDBC创建表 ...

    Java数据库编程宝典3

    第2部分 在两层客户/服务器结构中使用JDBC和SQL 第5章 使用JDBC和SQL创建表 5.1 创建数据库 5.2 使用表 5.2.1 记录和字段、行和列 5.2.2 SQL数据类型 5.2.3 完整性约束 5.3 创建表 5.4 使用JDBC创建表 ...

    疯狂JAVA讲义

    7.2.1 使用Iterator接口遍历集合元素 244 7.2.2 使用foreach循环遍历集合元素 246 7.3 Set接口 247 7.3.1 HashSet类 247 学生提问:hashCode方法对于HashSet的作用是什么? 249 7.3.2 TreeSet类 252 7.3.3 ...

    Hibernate+中文文档

    5.7. 辅助数据库对象(Auxiliary Database Objects) 6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent collections) 6.2. 集合映射( Collection mappings ) 6.2.1. 集合外键(Collection foreign keys)...

    hibernate3.2中文文档(chm格式)

    5.7. 辅助数据库对象(Auxiliary Database Objects) 6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent collections) 6.2. 集合映射( Collection mappings ) 6.2.1. 集合外键(Collection foreign keys)...

    Hibernate中文详细学习文档

    5.7. 辅助数据库对象(Auxiliary Database Objects) 6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent collections) 6.2. 集合映射( Collection mappings ) 6.2.1. 集合外键(Collection foreign keys)...

    Hibernate 中文 html 帮助文档

    5.7. 辅助数据库对象(Auxiliary Database Objects) 6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent collections) 6.2. 集合映射( Collection mappings ) 6.2.1. 集合外键(Collection foreign keys) ...

    HibernateAPI中文版.chm

    5.7. 辅助数据库对象(Auxiliary Database Objects) 6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent collections) 6.2. 集合映射( Collection mappings ) 6.2.1. 集合外键(Collection foreign keys)...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    5.7. 辅助数据库对象(Auxiliary Database Objects) 6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent collections) 6.2. 集合映射( Collection mappings ) 6.2.1. 集合外键(Collection foreign keys)...

    hibernate 体系结构与配置 参考文档(html)

    辅助数据库对象(Auxiliary Database Objects) 6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent collections) 6.2. 集合映射( Collection mappings ) 6.2.1. 集合外键(Collection foreign keys) ...

    Hibernate参考文档

    5.7. 辅助数据库对象(Auxiliary Database Objects) 6. 集合类(Collections)映射 6.1. 持久化集合类(Persistent collections) 6.2. 集合映射( Collection mappings ) 6.2.1. 集合外键(Collection foreign keys) ...

Global site tag (gtag.js) - Google Analytics