Java DatabaseMetaData getProcedureColumns() 方法及示例
此方法检索数据库/目录中存储过程的参数和结果列的描述。它接受 4 个参数:
**catalog** - 表示存储过程所在的目录(通常为数据库)名称的字符串参数,传递 "" 以获取没有目录的表的主键列的描述,如果不想使用目录并缩小搜索范围,则传递 null。
**schemaPattern** - 表示模式名称(或模式匹配)的字符串参数,在没有模式的情况下传递 "",如果不想使用模式,则传递 null。
**procedureNamePattern** - 表示需要描述的存储过程名称的字符串参数。
**columnNamePattern** - 表示列名称(或列名称模式)的字符串参数。
此方法返回一个 ResultSet 对象,该对象描述指定的存储过程列。此对象保存以下详细信息(作为列名):
列名 | 数据类型 | 描述 |
---|---|---|
PROCEDURE_CAT | 字符串 | 存储过程的目录。 |
PROCEDURE_SCHEM | 字符串 | 模式的目录。 |
PROCEDURE_NAME | 字符串 | 存储过程的名称。 |
COLUMN_NAME | 字符串 | 列的名称/存储过程的参数名称。 |
COLUMN_TYPE | 短整型 | 参数的类型(IN、OUT、INOUT、ResultSet 等)。 |
DATA_TYPE | 整型 | 列的数据类型,以整数表示。 |
TYPE_NAME | 字符串 | 列的数据类型的名称。 |
PRECISION | 整型 | 列的精度。 |
LENGTH | 整型 | 以字节为单位的长度。 |
SCALE | 短整型 | 刻度。 |
RADIX | 短整型 | 基数。 |
NULLABLE | 短整型 | 确定它是否包含空值。 |
REMARKS | 字符串 | 关于列的注释。 |
COLUMN_DEF | 字符串 | 列的默认值。 |
ORDINAL_POSITION | 整型 | 表中列的索引。 |
IS_NULLABLE | 字符串 | 如果列包含空值,则返回 yes;如果列不包含空值,则返回 false;如果无法确定列的空值能力,则返回空字符串 (" ")。 |
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_getProcedureColumns { public static void main(String args[]) throws SQLException { //Registering the Driver DriverManager.registerDriver(new com.mysql.jdbc.Driver()); //Getting the connection String url = "jdbc:mysql://127.0.0.1/mydatabase"; Connection con = DriverManager.getConnection(url, "root", "password"); System.out.println("Connection established......"); //Retrieving the meta data object DatabaseMetaData metaData = con.getMetaData(); //Retrieving the columns in the database ResultSet rs = metaData.getProcedureColumns(null, null, "myprocedure", null); //Printing the column name and size while (rs.next()) { System.out.println("Procedure name: "+rs.getString("PROCEDURE_NAME")); System.out.println("Column name: "+rs.getString("COLUMN_NAME")); System.out.println("Type name: "+rs.getString("TYPE_NAME")); System.out.println("Precision: "+rs.getString("PRECISION")); System.out.println("Radix: "+rs.getString("RADIX")); System.out.println(" "); } } }
输出
Connection established...... 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