Java DatabaseMetaData getProcedureColumns() 方法示例
此方法检索数据库/目录的过程参数和结果列的描述。它接受 4 个参数 −
catalog - 一个字符串参数,表示过程所在的目录(通常是数据库)的名称。传递 "" 可获取没有目录的表中主键列的描述;如果不想使用目录,则传递 null 以缩小搜索范围。
schemaPattern - 一个字符串参数,表示架构的名称(或名称模式),传递 ""如果没有 schema,则传递 null;如果不想使用 schema,则传递 null。
procedureNamePattern - 一个字符串参数,表示您需要描述的过程的名称。
columnNamePattern - 一个字符串参数,表示列的名称(或名称模式)。
此方法返回一个描述指定过程列的 ResultSet 对象。此对象包含以下详细信息的值(作为列名): −
列名 | 数据类型 | 描述 |
---|---|---|
PROCEDURE_CAT | String | 过程的目录。 |
PROCEDURE _SCHEM | String | 模式的目录。 |
PROCEDURE _NAME | String | 过程的名称。 |
COLUMN_NAME | String | 过程的列名称/参数名称。 |
COLUMN_TYPE | Short | 参数类型 (IN、OUT、INOUT、ResultSet 等…) |
DATA_TYPE | Int | 列的数据类型为整数。 |
TYPE_NAME | String | 列的数据类型名称。 |
精度 | int | 列的精度。 |
长度 | int | 长度(字节)。 |
比例 | 短整型 | 比例。 |
基数 | 短整型 | 基数。 |
可为空 | 短整型 | 确定是否包含空值。 |
REMARKS | String | 列的注释。 |
COLUMN_DEF | String | 列的默认值。 |
ORDINAL_POSITION | int | 列在表。 |
IS_NULLABLE | String | 如果列包含空值,则返回"yes";如果列不包含空值,则返回"false";如果无法确定列是否为空,则返回空字符串 (" ")。 |
SPECIFIC_NAME | String | 过程的名称(用于唯一标识它)。 |
获取数据库中存储过程列的描述−
确保您的数据库已启动并正在运行。
使用 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 { //注册驱动程序 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 rs = metaData.getProcedureColumns(null, null, "myprocedure", null); //打印列名和大小 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(" "); } } }
输出
连接已建立...... 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