JDBC初级应用实例(二)[动态访问数据库]

    上面有一位朋友问了,如果在已经连结的情况下,知道当前连结的库的表的情况呢?其实只你已经连结了,你就能知道这个库中所以情况而不仅仅上表的情况:
    有时(我到目前只见到过一次),我们对一种新的数据库根本不知道它的结构或者是其中的内容,好坏么我们如何来获取数据库的情况呢?
    真实的例子是这样的,我的朋友的公司接到了一个单子,对方使用的数据库是叫什么/"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
        ); 

你可能感兴趣的:(JDBC初级应用实例(二)[动态访问数据库])