getColumns 方法 (SQLServerDatabaseMetaData)

检索指定目录中可用的表列的说明。

# 语法

    public java.sql.ResultSet getColumns(java.lang.String catalog,
                                         java.lang.String schema,
                                         java.lang.String table,
                                         java.lang.String col)

# 参数

catalog

包含目录名称的 String。

schema

包含架构名称模式的 String。

table

包含表名称模式的 String。

col

包含列名称模式的 String。

# 返回值

SQLServerResultSet 对象。

# 异常

SQLServerException

# 注释

此 getColumns 方法由 java.sql.DatabaseMetaData 接口中的 getColumns 方法指定。

由 getColumns 方法返回的结果集将包含下列信息：

名称 | 类型 | 说明
--- | --- | ---
TABLE_CAT | String | 目录名称。
TABLE_SCHEM | String | 表架构的名称。
TABLE_NAME | String | 表的名称。
COLUMN_NAME | String | 列名称。
DATA_TYPE | smallint | 来自 java.sql.Types 的 SQL 数据类型。
TYPE_NAME | String | 数据类型的名称。
COLUMN_SIZE | int | 列的精度。
BUFFER_LENGTH | smallint | 数据的传输大小。
DECIMAL_DIGITS | smallint | 列的小数位数。
NUM_PREC_RADIX | smallint | 列的基数。
NULLABLE | smallint | 指示列是否可以为 Null。可以是下列值之一： columnNoNulls (0) columnNullable (1)
REMARKS | String | 与列关联的注释。 对于此列，SQL Server 始终返回 Null。
COLUMN_DEF | String | 列的默认值。
SQL_DATA_TYPE | smallint | SQL 数据类型出现在描述符的 TYPE 字段中时的值。该列与 DATA_TYPE 列相同，datetime 和 SQL-92 interval 数据类型除外。该列始终返回值。
SQL_DATETIME_SUB | smallint | datetime 及 SQL-92 interval 数据类型的子类型代码。对于其他数据类型，该列返回 NULL。
CHAR_OCTET_LENGTH | int | 列中的最大字节数。
ORDINAL_POSITION | int | 列在表中的索引。
IS_NULLABLE | String | 指示列是否允许 Null 值。
SS_IS_SPARSE | smallint | 如果该列是稀疏列，它将具有值 1；否则为 0。1
SS_IS_COLUMN_SET | smallint | 如果该列是稀疏 column_set 列，它将具有值 1；否则为 0。1
SS_IS_COMPUTED | smallint | 指示 TABLE_TYPE 中的列是否为计算所得的列。1
IS_AUTOINCREMENT | String | 如果列是自动递增的，则为“是”。如果列不是自动递增的，则为“否”。如果驱动程序无法确定列是否为自动递增，则为 ""（空字符串）。1
SS_UDT_CATALOG_NAME | String | 包含用户定义类型 (UDT) 的目录名称。1
SS_UDT_SCHEMA_NAME | String | 包含用户定义类型 (UDT) 的架构名称。1
SS_UDT_ASSEMBLY_TYPE_NAME | String | 采用完全限定名称的用户定义类型 (UDT)。1
SS_XML_SCHEMACOLLECTION_CATALOG_NAME | String | 在其中定义 XML 架构集合名称的目录的名称。如果找不到目录名称，则此变量包含空字符串。1
SS_XML_SCHEMACOLLECTION_SCHEMA_NAME | String | 在其中定义 XML 架构集合名称的架构的名称。如果找不到架构名称，则为空字符串。1
SS_XML_SCHEMACOLLECTION_NAME | String | XML 架构集合的名称。如果找不到名称，则为空字符串。1
SS_DATA_TYPE | tinyint | 扩展存储过程使用的 SQL Server 数据类型。 注意 有关 SQL Server 返回的数据类型的详细信息，请参阅 SQL Server 联机丛书中的“数据类型 (Transact-SQL)”。

(1) 如果连接到 SQL Server 2005，则此列不会显示。

有关 getColumns 方法返回的数据的详细信息，请参阅 SQL Server 联机丛书中的“sp_columns (Transact-SQL)”。

在 Microsoft SQL Server JDBC Driver 3.0 中，您将看到有别于以往 JDBC 驱动程序版本的以下行为更改：

DATA_TYPE 列具有以下更改：

SQL Server 数据类型 | 返回 JDBC Driver 2.0 中的类型（或者，如果连接到 SQL Server 2005）和关联数值常量 | 连接到 SQL Server 2008 或更高版本时，返回 JDBC Driver 3.0 中的类型
--- | --- | ---
大于 8 kB 的用户定义类型 | LONGVARBINARY (-4) | VARBINARY (-3)
geography | LONGVARBINARY (-4) | VARBINARY (-3)
geometry | LONGVARBINARY (-4) | VARBINARY (-3)
varbinary(max) | LONGVARBINARY (-4) | VARBINARY (-3)
nvarchar(max) | LONGVARCHAR (-1) 或 LONGNVARCHAR (JDBC 4) (-16) | VARCHAR (12) 或 NVARCHAR (JDBC 4) (-9)
varchar(max) | LONGVARCHAR (-1) | VARCHAR (12)
time | VARCHAR (12) 或 NVARCHAR (JDBC 4) (-9) | TIME (-154)
date | VARCHAR (12) 或 NVARCHAR (JDBC 4) (-9) | DATE (91)
datetime2 | VARCHAR (12) 或 NVARCHAR (JDBC 4) (-9) | TIMESTAMP (93)
datetimeoffset | VARCHAR (12) 或 NVARCHAR (JDBC 4) (-9) | microsoft.sql.Types.DATETIMEOFFSET (-155)

COLUMN_SIZE 列具有以下更改：

SQL Server 数据类型 | 返回 JDBC Driver 2.0 中的类型 | 返回 JDBC Driver 3.0 中的类型
--- | --- | ---
nvarchar(max) | 1073741823 | 2147483647（数据库元数据）
xml | 1073741823 | 2147483647（数据库元数据）
小于或等于 8 kB 的用户定义类型 | 8 kB（结果集和参数元数据） | 存储过程返回的实际大小。
time |  | 类型的字符串表示形式的字符长度，假定精度允许的最大值为秒的小数形式。
date |  | 与 time 相同
datetime2 |  | 与 time 相同
datetimeoffset |  | 与 time 相同

BUFFER_LENGTH 列具有以下更改：

SQL Server 数据类型 | 返回 JDBC Driver 2.0 中的类型 | 返回 JDBC Driver 3.0 中的类型
--- | --- | ---
大于 8 kB 的用户定义类型 |  | 2147483647

TYPE_NAME 列具有以下更改：

SQL Server 数据类型 | 返回 JDBC Driver 2.0 中的类型 | 返回 JDBC Driver 3.0 中的类型
--- | --- | ---
varchar(max) | text | varchar
varbinary(max) | image | varbinary

DECIMAL_DIGITS 列具有以下更改：

SQL Server 类型 | JDBC Driver 2.0 | JDBC Driver 3.0
--- | --- | ---
time | null | 7（或指定的较小值）
date | null | null
datetime2 | null | 7（或指定的较小值）
datetimeoffset | null | 7（或指定的较小值）

SQL_DATA_TYPE 列具有以下更改：

SQL Server 数据类型 | JDBC Driver 2.0 中的 SQL Server 2008 数据值 | JDBC Driver 3.0 中的 SQL Server 2008 数据值
--- | --- | ---
varchar(max) | -10 | -9
nvarchar(max) | -1 | -9
xml | -10 | -152
小于或等于 8 kB 的用户定义类型 | -3 | -151
大于 8 kB 的用户定义类型 | 在 JDBC Driver 2.0 中不可用 | -151
geography | -4 | -151
geometry | -4 | -151
hierarchyid | -4 | -151
time | -9 | 92
date | -9 | 91
datetime2 | -9 | 93
datetimeoffset | -9 | -155

# 示例

下例演示了如何使用 getColumns 方法返回 SQL Server 2005 AdventureWorks 示例数据库中的 Person.Contact 表的信息。

    import java.sql.*;
    public class c1 {
       public static void main(String[] args) {
          String connectionUrl = "jdbc:sqlserver://localhost:1433;databaseName=AdventureWorks;integratedsecurity=true";

          Connection con = null;
          Statement stmt = null;
          ResultSet rs = null;

          try {
             Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
             con = DriverManager.getConnection(connectionUrl);
             DatabaseMetaData dbmd = con.getMetaData();
             rs = dbmd.getColumns("AdventureWorks", "Person", "Contact", "FirstName");

             ResultSet r = dbmd.getColumns(null, null, "Contact", null);
             ResultSetMetaData rm = r.getMetaData();
             int noofcols = rm.getColumnCount();

             if (r.next())
                for (int i = 0 ; i < noofcols ; i++ )
                System.out.println(rm.getColumnName( i + 1 ) + ": \t\t" + r.getString( i + 1 ));
          }

          catch (Exception e) {}
          finally {}
       }
    }

# 请参阅

SQLServerDatabaseMetaData 类
SQLServerDatabaseMetaData 方法
SQLServerDatabaseMetaData 成员
发送有关本主题的反馈至 Microsoft。

© 2012 Microsoft。保留所有权利。