2.5.1 调用存储过程

优质
小牛编辑
129浏览
2023-12-01

数据库元数据就是和数据库本身及其子项(表、视图等)相关的数据,使用Connection接口的getMetaData()可以获得JDBC提供的所有的元数据。getMetaData方法的定义如下:

DatabaseMetaData getMetaData() throws SQLException;

DatabaseMetaData接口为我们提供了很多用于访问数据库元数据的方法,如数据库版本、JDBC驱动名、JDBC驱动版本、表信息、视图信息、存储过程信息等。下面是一些常用的获得数据库元数据的方法:

下面的代码演示了如何使用上面的方法来获得数据库元数据,这个程序将列出一些和数据库相关的信息,以及服务器中所有的数据库名、mydb数据库中的表名、视图名、存储过程名和函数名,示例的代码如下:

public class DBMetaData
{
    public static void main(String[] args) throws Exception
    {
        Class.forName("com.mysql.jdbc.Driver");
        //  获得Connection对象
        Connection conn =
DriverManager.getConnection("jdbc:mysql://localhost/mydb?" + 
characterEncoding=UTF8", "root", "1234");
             //  获得DatabaseMetaData对象
        DatabaseMetaData dbmd = conn.getMetaData();
        //  开始输出和数据库有关的元数据 
        System.out.println("数据库产品名:" + dbmd.getDatabaseProductName());
        System.out.println("数据库版本:" + dbmd.getDatabaseProductVersion());
        System.out.println("JDBC驱动名:" + dbmd.getDriverName());
        System.out.println("JDBC驱动版本:" + dbmd.getDriverVersion());
        System.out.println("--------------数据库-------------");
        //  获得数据库列表
        ResultSet databases = dbmd.getCatalogs();
        //  输出数据库名 
        while(databases.next())
        {
            System.out.println(databases.getString("TABLE_CAT"));                    
        }        
        System.out.println("--------------表-------------");
        //  获得mydb数据库中的表名
        ResultSet tables = dbmd.getTables("mydb", null, null, new String[]{"table"});        
        while(tables.next())
        {
            System.out.println(tables.getString("TABLE_NAME"));                    
        }
        System.out.println("--------------视图-------------");
        //  获得mydb数据库中的表名
        ResultSet views = dbmd.getTables("mydb", null, null, new String[]{"view"});        
        while(views.next())
        {
            System.out.println(views.getString("TABLE_NAME"));                    
        }
        System.out.println("--------------存储过程、函数-------------");        
        //  获得mydb数据库中的存储过程
        ResultSet procfun = dbmd.getProcedures("mydb", null, null);        
        while(procfun.next())
        {
            System.out.println(procfun.getString("PROCEDURE_NAME"));                    
        }        
        conn.close();
    }
}

在运行上面的程序后,将会输出如下的信息(下面的输出信息只是我机器上的mysql配置,读者可能在自己机器上输出不同的信息):

数据库产品名:MySQL

数据库版本:5.0.21-community-nt

JDBC驱动名:MySQL-AB JDBC Driver

JDBC驱动版本:mysql-connector-java-5.0.7 ( $Date: 2007-03-09 22:13:57 +0100 (Fri, 09 Mar 2007) $, $Revision: 6341 $ )

--------------数据库-------------

information_schema

ersystem_development

hibernate

mydb

mysql

rails

--------------表-------------

t_books

t_booksale

t_image

--------------视图-------------

--------------存储过程、函数-------------

p_myproc