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文档。
下次继续:根据数据库信息自动生成类结构。