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

来源:互联网 发布:北京百知教育骗局 编辑:程序博客网 时间:2024/06/14 18:11
  • 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 类的代码如下:

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

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

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

0 0
原创粉丝点击