Java DatabaseMetaData getProcedures() 方法示例
此方法检索数据库/目录的存储过程描述。它接受 3 个参数 −
catalog:一个字符串参数,表示存储过程所在的目录(通常指数据库)的名称。传递 "&" 可获取没有目录的表中主键列的描述;如果不想使用目录,则传递 null 以缩小搜索范围。
schemaPattern:一个字符串参数,表示架构的名称(或名称模式),传递 "&" 如果没有 schema,则传递 null;如果不想使用 schema,则传递 null。
procedureNamePattern:一个字符串参数,表示需要描述的过程的名称。
此方法返回一个描述指定过程的 ResultSet 对象。此对象包含以下详细信息的值(作为列名)−
列名 | 数据类型 | 描述 |
---|---|---|
PROCEDURE_CAT | 字符串 | 过程的目录。 |
PROCEDURE _SCHEM | 字符串 | 模式的目录。 |
PROCEDURE _NAME | 字符串 | 过程的名称。 |
REMARKS | 字符串 | 列的注释。 |
SPECIFIC_NAME | 字符串 | 过程的名称(用于唯一标识)。 |
获取数据库中存储过程的描述 −
确保数据库已启动并正在运行。
使用 DriverManager 类的 registerDriver() 方法注册驱动程序。传递与底层数据库对应的驱动程序类的对象。
使用 DriverManager 类的 getConnection() 方法获取连接对象。将数据库 URL、用户名和密码作为字符串变量传递。
使用 Connection 接口的 getMetaData() 方法获取当前连接的 DatabaseMetaData 对象。
最后,通过调用 DatabaseMetaData 接口的 getProcedureColumns() 方法获取包含所需存储过程描述的 ResultSet 对象。
示例
我们使用 CREATE 语句在 MySQL 数据库中创建一个名为 myprocedure 的过程,如下所示 −
CREATE PROCEDURE myprocedure( IN Product_Name VARCHAR(255), IN Name_Of_Customer VARCHAR(255), IN Month_Of_Dispatch VARCHAR(255), IN Price INT, IN Location VARCHAR(255)) BEGIN insert into Dispatches values ( Product_Name, Name_Of_Customer, Month_Of_Dispatch, Price, Location);
以下 JDBC 程序与 MySQL 数据库建立连接,检索上述创建过程的描述。
import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; public class DatabaseMetaData_getProcedures { public static void main(String args[]) throws SQLException { //注册驱动程序 DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //获取连接 String url = "jdbc:mysql://localhost/mydatabase"; Connection con = DriverManager.getConnection(url, "root", "password"); System.out.println("连接已建立......"); //检索元数据对象 DatabaseMetaData metaData = con.getMetaData(); //检索数据库中的列 ResultSet procedures = metaData.getProcedures(null, null, "myprocedure"); //打印列名和大小 while (procedures.next()) { System.out.println("Catalog name: "+procedures.getString("PROCEDURE_CAT")); System.out.println("Procedure name: "+procedures.getString("PROCEDURE_NAME")); System.out.println("Type of the procedure: "+procedures.getShort("PROCEDURE_TYPE")); System.out.println("Specific name of the procedure: "+procedures.getString("SPECIFIC_NAME")); System.out.println(" "); } } }
输出
连接已建立...... Procedure name: myprocedure Column name: Product_Name Type name: VARCHAR Precision: 255 Radix: 10 Procedure name: myprocedure Column name: Name_Of_Customer Type name: VARCHAR Precision: 255 Radix: 10 Procedure name: myprocedure Column name: Month_Of_Dispatch Type name: VARCHAR Precision: 255 Radix: 10 Procedure name: myprocedure Column name: Price Type name: INT Precision: 10 Radix: 10 Procedure name: myprocedure Column name: Location Type name: VARCHAR Precision: 255 Radix: 10