首页 > 编程 > Java > 正文

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

2019-11-08 03:04:00
字体:
来源:转载
供稿:网友

转载地址:

   http://www.codefans.net/articles/1791.shtml

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 类的代码如下:

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.*;包。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表