Java获取数据库表列信息、索引信息、存储过程等信息 .

  • Java获得数据库基本信息,包括表的信息、表中列的信息、索引信息、存储过程信息等。先创建与数据库的连接,通过Connection 对象的getMetaData()方法可以创建DatabaseMetaData对象,从该对象中获取数据库的基本信息。通过使用DatabaseMetaData 对象的getDatabaseProductName()方法可以获取连接的数据库DBMS 名称,使用getUserName()方法可以获取建立连接使用的用户名。获取表的信息可以使用该对象的getTables()方法,如:

    ResultSet rs=dbmd.getTables(catalog,schemapattern,tablenamepattern,type[]);

    其中catalog 为目录名,null 表示忽略目录;schemapattern 为大纲的匹配模式,null 表示忽略;tablenamepattern 表示表名称的匹配模式;type 为需要检索的表类型列表。使用getTables()获得一个结果集,此结果集中每一行都有一个表的信息,可以通过getInt()、getString()等方法来获得每一行中各列的信息,主要有TABLE_NAME、TABLE_TYPE 等,关于这些信息的描述在程序中作了注释,也可以参考JDBC 的API 手册。通过使用DatabaseMetaData 对象的getColumns()方法来获得数据库表的列的信息,如:

    ResultSet rs=dbmd.getColumns(catalog,schemapattern,tablenamepattern,columnsnamepattern);

    其中columnsnamepattern 表示列名匹配模式。通过getColumns()方法获得的结果集每一行都是一个列的描述,主要有TABLE_NAME、COLUMN_NAME 、TYPE_NAME 等。获取索引信息是使用了DatabaseMetaData 对象的getIndexInfo()方法,方法使用如下:

    ResultSet rs=dbmd.getIndexInfo(catalog,schemapattern,tablenamepattern,unique,approximate);

    其中,unique 为boolean 型,当为真值时,返回具有唯一值的索引,而为假时,不论索引值是否唯一都返回;approximate 为true 时,返回近似值,为false 时,返回精确值。通过getIndexInfo()方法获得的结果集中每一行都是一个索引的描述,主要有TABLE_NAME、INDEX_NAME、TYPE 等。使用DatabaseMetaData 对象的getProcedures()方法获取存储过程的信息,使用方法如下:

    ResultSet rs=dbmd.getProcedures(catalog,schemapattern,procedurenamepattern);

    其中,procedurenamepattern 是存储过程名称的匹配模式。该方法返回的结果集是存储过程的描述信息,主要有PROCEDURE_NAME、PROCEDURE_TYPE 等。使用DatabaseMetaData 对象的getProceduresColumns()方法获取存储过程的信息,使用方法如下:

    ResultSet rs=dbmd.getProceduresColumns(catalog,schemapattern,procedurenamepattern,cloumnnamepattern);

    其中,cloumnnamepattern 表示列名的匹配模式。具体的程序代码如下:

    1.编写useTable 类的基本框架,在该类中仅包括main()方法,在main()方法中先加载驱动程序,建立与数据库的连接,创建数据库表,获取表中信息的结果集,输出表的信息,获取表中列的信息,输出表中列的信息,获取索引信息,输出索引信息,获取存储过程信息,输出存储过程信息。

    2.对数据库编程,useTable 类的代码如下:

    001 class useTable
    002 {
    003 public static void main(String argv[])
    004 {
    005 try
    006 {
    007 String ul,namestr,typestr,cstr,strn,indexstr,prostr;
    008 short data;
    009 int index,pron;
    010 String[] type={"table"};
    011 ul="jdbc:odbc:useDSN";
    012 //加载驱动程序
    013 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    014 //建立连接
    015 Connection con=DriverManager.getConnection(ul,"sa","");
    016 //使用DatabaseMetaData 对象获取数据源相关信息
    017 DatabaseMetaData dbmd=con.getMetaData();
    018 //获取表中信息的结果集
    019 ResultSet rs=dbmd.getTables(null,null,null,type);
    020 //输出表的信息
    021 while(rs.next())
    022 {
    023 //获取表名
    024 namestr=rs.getString("TABLE_NAME");
    025 //获取表的类型
    026 typestr=rs.getString("TABLE_TYPE");
    027 //输出结果集
    028 System.out.println("输出数据源中所有表的信息");
    029 strn="数据库表名:"+namestr+" "+"表的类型:"+typestr;
    030 System.out.println(strn);
    031 }
    032 //获取表中列的信息
    033 rs=dbmd.getColumns(null,null,"student","%");
    034 //输出表中列的信息
    035 while(rs.next())
    036 {
    037 //获取表名
    038 namestr=rs.getString("TABLE_NAME");
    039 //获取列名
    040 cstr=rs.getString("COLUMN_NAME");
    041 //获取列类型
    042 typestr=rs.getString("TYPE_NAME");
    043 //获取列的SQL 类型
    044 data=rs.getShort("DATA_TYPE");
    045 //输出列信息
    046 System.out.println("输出数据库中列的信息");
    047 strn="表名:"+namestr+" "+"列名:"+cstr+" "+"列类型:"+" "+"列SQL 类型:"+data;
    048 System.out.println(strn);
    049 }
    050 //获取索引信息
    051 rs=dbmd.getIndexInfo(null,null,"student",false,false);
    052 //输出索引信息
    053 while(rs.next())
    054 {
    055 //获取索引名
    056 namestr=rs.getString("INDEX_NAME");
    057 //获取索引类型
    058 index=rs.getInt("TYPE");
    059 switch(index)
    060 {
    061 case 0:
    062 {
    063 indexstr="没有索引";
    064 break;
    065 }
    066 case 1:
    067 {
    068 indexstr="聚集索引";
    069 break;
    070 }
    071 case 2:
    072 {
    073 indexstr="哈希表索引";
    074 break;
    075 }
    076 case 3:
    077 {
    078 indexstr="其它索引";
    079 break;
    080 }
    081 }
    082 strn="索引名:"+namestr+" "+"索引类型:"+index;
    083 System.out.println(strn);
    084 }
    085 //获取存储过程信息
    086 rs=dbmd.getProcedures(null,null,"%");
    087 //输出存储过程信息
    088 System.out.println("存储过程信息");
    089 while(rs.next())
    090 {
    091 //获取存储过程名称
    092 namestr=rs.getString("PROCEDURE_NAME");
    093 //获取存储过程类型
    094 pron=rs.getInt("PROCEDURE_TYPE");
    095 switch(pron)
    096 {
    097 case 0:
    098 {
    099 prostr="返回结果未知";
    100 break;
    101 }
    102 case 1:
    103 {
    104 prostr="没有返回结果";
    105 break;
    106 }
    107 case 2:
    108 {
    109 prostr="有返回结果";
    110 break;
    111 }
    112 }
    113 strn="存储过程名称:"+namestr+" "+"存储过程类型:"+prostr;
    114 System.out.println(strn);
    115 }
    116 //获取存储过程列信息
    117 rs=dbmd.getProcedureColumns(null,null,"%","%");
    118 //输出存储过程列信息
    119 System.out.println("存储过程列信息");
    120 while(rs.next())
    121 {
    122 //获取存储过程名称
    123 namestr=rs.getString("PROCEDURE_NAME");
    124 //获取存储过程类型
    125 prostr=rs.getString("COLUMN_NAME");
    126 strn="存储过程:"+namestr+" "+"存储过程列名:"+prostr;
    127 System.out.println(strn);
    128 }
    129 //关闭连接
    130 con.close();
    131 }
    132 catch(Exception e)
    133 {
    134 System.out.println(e.getMessage());
    135 e.printStackTrace();
    136 }
    137 }
    138 }

    因为程序使用了JDBC 类,所以需要引入import java.sql.*;包。

    • Java获得数据库基本信息,包括表的信息、表中列的信息、索引信息、存储过程信息等。先创建与数据库的连接,通过Connection 对象的getMetaData()方法可以创建DatabaseMetaData对象,从该对象中获取数据库的基本信息。通过使用DatabaseMetaData 对象的getDatabaseProductName()方法可以获取连接的数据库DBMS 名称,使用getUserName()方法可以获取建立连接使用的用户名。获取表的信息可以使用该对象的getTables()方法,如:

      ResultSet rs=dbmd.getTables(catalog,schemapattern,tablenamepattern,type[]);

      其中catalog 为目录名,null 表示忽略目录;schemapattern 为大纲的匹配模式,null 表示忽略;tablenamepattern 表示表名称的匹配模式;type 为需要检索的表类型列表。使用getTables()获得一个结果集,此结果集中每一行都有一个表的信息,可以通过getInt()、getString()等方法来获得每一行中各列的信息,主要有TABLE_NAME、TABLE_TYPE 等,关于这些信息的描述在程序中作了注释,也可以参考JDBC 的API 手册。通过使用DatabaseMetaData 对象的getColumns()方法来获得数据库表的列的信息,如:

      ResultSet rs=dbmd.getColumns(catalog,schemapattern,tablenamepattern,columnsnamepattern);

      其中columnsnamepattern 表示列名匹配模式。通过getColumns()方法获得的结果集每一行都是一个列的描述,主要有TABLE_NAME、COLUMN_NAME 、TYPE_NAME 等。获取索引信息是使用了DatabaseMetaData 对象的getIndexInfo()方法,方法使用如下:

      ResultSet rs=dbmd.getIndexInfo(catalog,schemapattern,tablenamepattern,unique,approximate);

      其中,unique 为boolean 型,当为真值时,返回具有唯一值的索引,而为假时,不论索引值是否唯一都返回;approximate 为true 时,返回近似值,为false 时,返回精确值。通过getIndexInfo()方法获得的结果集中每一行都是一个索引的描述,主要有TABLE_NAME、INDEX_NAME、TYPE 等。使用DatabaseMetaData 对象的getProcedures()方法获取存储过程的信息,使用方法如下:

      ResultSet rs=dbmd.getProcedures(catalog,schemapattern,procedurenamepattern);

      其中,procedurenamepattern 是存储过程名称的匹配模式。该方法返回的结果集是存储过程的描述信息,主要有PROCEDURE_NAME、PROCEDURE_TYPE 等。使用DatabaseMetaData 对象的getProceduresColumns()方法获取存储过程的信息,使用方法如下:

      ResultSet rs=dbmd.getProceduresColumns(catalog,schemapattern,procedurenamepattern,cloumnnamepattern);

      其中,cloumnnamepattern 表示列名的匹配模式。具体的程序代码如下:

      1.编写useTable 类的基本框架,在该类中仅包括main()方法,在main()方法中先加载驱动程序,建立与数据库的连接,创建数据库表,获取表中信息的结果集,输出表的信息,获取表中列的信息,输出表中列的信息,获取索引信息,输出索引信息,获取存储过程信息,输出存储过程信息。

      2.对数据库编程,useTable 类的代码如下:

      001 class useTable
      002 {
      003 public static void main(String argv[])
      004 {
      005 try
      006 {
      007 String ul,namestr,typestr,cstr,strn,indexstr,prostr;
      008 short data;
      009 int index,pron;
      010 String[] type={"table"};
      011 ul="jdbc:odbc:useDSN";
      012 //加载驱动程序
      013 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      014 //建立连接
      015 Connection con=DriverManager.getConnection(ul,"sa","");