Chinaunix首页 | 论坛 | 博客
  • 博客访问: 483068
  • 博文数量: 1496
  • 博客积分: 79800
  • 博客等级: 大将
  • 技术积分: 9940
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-09 13:22
文章分类

全部博文(1496)

文章存档

2011年(1)

2008年(1495)

我的朋友

分类:

2008-09-09 13:26:42


  有时,我们对一种新的数据库根本不知道它的结构或者是其中的内容,好坏么我们如何来获取数据库的情况呢?
  
  真实的例子是这样的,我的朋友的公司接到了一个单子,对方使用的数据库是叫什么\"titanium\"的,说实话由于本人的孤陋寡闻,在此之前从来不知道还有这种数据库,更别说如何访问了,现在朋友要看里面有什么\"东西\",当然是一筹莫展.所以只好找我.
  
  接到电话后,我先问他是什么平台上跑的,如果连结的,他说是在windows下可以建立ODBC数据源,哈哈,就是说可以用java建立Connection了,OK只能建立一下Connection,那么就可以得到这个数据库的所有元信息:
  
  DatabaseMetadata dbmd = conn.getMetadata();然后你可以从这个对象获取以下信息:
  getUrl();   //返回与这个数据库的连结的URL,当然是已知的,要不你怎么连上去
  getUserName(); //返回与这个数据库的连结的用户,同上
  isReadOnly();数据库是否为只读
  getDatabaseProduceName();//数据库产品名称
  getDatabaseProduceVersion();//版本号
  getDriverName();//驱动程序
  getDriverVersion();//驱动程序版本
  
  以上内容没有什么意义
  
  ResultSet getTables(String catalog,
  String schemaPattern,
  String tableNamePattern,
  String[] types)
  可以得到该库中\"表\"的所有情况,这里的表包括表,视图,系统表,临时空间,别名,同义词对于各参数:
  String catalog,表的目录,可能为null,\"null\"匹配所有
  String schemaPattern,表的大纲,同上
  String tableNamePattern,表名,同上
  String[] types,表的类型,\"null\"匹配所有,可用的类型为:
  TABLE,VIEW,SYSEM TABLE,GLOBAL TEMPORARY,LOCAL TEMPORARY,ALIAS,SYNONYM
  
  例如:
  DatabaseMetaData dbmd = conn.getMetaData();
  ResultSet rs = dbmd.getTables(null,null,null,null);
  ResultSetMetaData rsmd = rs.getMetaData();
  int j = rsmd.getColumnCount();
  for(int i=1;i<=j;i++){
  out.print(rsmd.getColumnLabel(i)+\"\\t\");
  }
  out.println();
  while(rs.next()){
  for(int i=1;i<=j;i++){
  out.print(rs.getString(i)+\"\\t\");
  }
  out.println();
  }
  对于更详细的表中的列的信息,可以用dbmd(不是rsmd).getColumns(
  String catalog,
  String schemaPattern,
  String tableNamePattern,
  String columnNamePattern
  )
  不仅可以获得rsmd中的信息,还可以获得列的大小,小数位数,精度,缺省值,列在表中的位置等相关信息.
  
  还有两个方法,调用和获取表信息一样,可以获得过程和索引的信息:
  ResultSet getProcedures(
  String catalog,
  String schemaPattern,
  String procedurePattern
  );
  ResultSet getIndexINFO(
  String catalog,
  String schemaPattern,
  String table,
  boolean unique,boolean approximate
  );
【责编:admin】

--------------------next---------------------

阅读(108) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~