MetaData类简要介绍:

MetaData类用来获取数据库的基本信息,分为两类:数据库元数据DatabaseMataData类和结果集元数据ResultSetMetaData类。主要用处:用于ORM概念,在由数据库表结构生成Java类结构时需要到此方法。

参考手册:

有些 DatabaseMetaData方法以 ResultSet 对象的形式返回信息列表。常规 ResultSet 方法,比如 getString 和 getInt,可用于从这些 ResultSet 对 象中检索数据。如果给定形式的元数据不可用,则 ResultSet 获取方法抛 出 SQLException。
有些DatabaseMetaData方法使用 String 模式的参数。这些参数都有 fooPattern 这样的名称。在模式 String 中,”%” 表示匹配 0 个或多个字符 的任何子字符串,”_” 表示匹配任何一个字符。仅返回匹配搜索模式的元数 据项。如果将搜索模式参数设置为 null,则从搜索中删除参数标准。


解决项目一SORM中的获取数据库信息并存储的问题:

1)通过连接对象获取数据库元数据DatabaseMataData:
Connection con=DBManager.getCon();//已封装好的类的方法,返回一个Connection对象。
DatabaseMetaData metaDB=con.getMetaData();
2)通过DatabaseMetaData获取数据库中所有表的信息:
ResultSet rsTables=metaDB.getTables(null,"%","%", new   String[]{"TABLE"});//获取所有表
3)通过游标获取数据库中每张表的信息并存储:

1 获取表名:

private static List<String>tName=new ArrayList<String>();//存放表名
String tableName=(String) rsTables.getObject("TABLE_NAME");
tName.add(tableName);

2 获取获取一张表的所有列名和数据类型:

Private static Map<String,Map<String,String>>mapField=new HashMap<String,Map<String,String>>();// 存储每个表的所有属性和数据类型
ResultSet rsColumn=metaDB.getColumns(null, "%", tableName, "%");//获取列名
    while(rsColumn.next()){
        if(field==null){
            field=new HashMap();
        }
        Object cname=rsColumn.getObject("COLUMN_NAME");
        Object ctype=rsColumn.getObject("TYPE_NAME");//获取数据类型
        field.put(cname, ctype);
    }
mapField.put(tableName,field);

3 获取一张表的主键信息:

//存储每个表对应的联合主键
    private static Map<String,List<String>>mapUnionKey=new HashMap<String,List<String>>();
    // 存储每个表对应的唯一主键
    private static Map<String,String>mapOnlyKey=new HashMap<String,String>();

ResultSet rsKey=metaDB.getPrimaryKeys(null, "%", tableName);//获取一张表的主键信息
List keyList=new ArrayList();
while(rsKey.next()){
    keyList.add(rsKey.getObject("COLUMN_NAME"));//存储主键的列名
}

if(keyList.size()>1){
    mapUnionKey.put(tableName, keyList);//联合主键
}else{
    mapOnlyKey.put(tableName, (String) keyList.get(0));//唯一主键
}

通过循环数据库,获取每一张表的信息,并用Java容器进行存储。既然可以拿到数据库中每张表的信息,那么我们便可以通过这些信息,用Javabean的存储方式来存储表结构,并且让程序根据数据库信息自动生成类结构。

Ps:程序中有些方法或参数,博主也不是很熟悉,大家参考时请多查阅API文档。

下次继续:根据数据库信息自动生成类结构。