getColumns 方法 (SQLServerDatabaseMetaData)
检索指定目录中可用的表列的说明。
语法
public java.sql.ResultSet getColumns(java.lang.String catalog,
java.lang.String schema,
java.lang.String table,
java.lang.String col)
参数
catalog
一个包含目录名称的字符串 。
架构
一个包含架构名称模式的字符串 。
table
一个包含表名称模式的字符串。
col
一个包含列名称模式的字符串。
返回值
一个 SQLServerResultSet 对象。
例外
备注
此 getColumns 方法是由 java.sql.DatabaseMetaData 接口中的 getColumns 方法指定的。
由 getColumns 方法返回的结果集将包含以下信息:
名称 | Type | 说明 |
---|---|---|
TABLE_CAT | 字符串 | 目录名称。 |
TABLE_SCHEM | 字符串 | 表架构名称。 |
TABLE_NAME | 字符串 | 表名称。 |
COLUMN_NAME | 字符串 | 列名称。 |
DATA_TYPE | smallint | 来自 java.sql.Types 的 SQL 数据类型。 |
TYPE_NAME | 字符串 | 数据类型的名称。 |
COLUMN_SIZE | int | 列的精度。 |
BUFFER_LENGTH | smallint | 数据的传输大小。 |
DECIMAL_DIGITS | smallint | 列的小数位数。 |
NUM_PREC_RADIX | smallint | 列的基数。 |
NULLABLE | smallint | 指示列是否可以为 Null。 可以为下列值之一: columnNoNulls (0) columnNullable (1) |
REMARKS | 字符串 | 与列关联的注释。 注意:对于此列,SQL Server 始终会返回 null。 |
COLUMN_DEF | 字符串 | 列的默认值。 |
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 | 字符串 | 指示列是否允许 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 | 字符串 | 如果列是自动递增的,则为“是”。 如果列不是自动递增的,则为“否”。 如果驱动程序无法确定列是否为自动递增,则为 ""(空字符串)。 1 |
SS_UDT_CATALOG_NAME | 字符串 | 包含用户定义类型 (UDT) 的目录名称。 1 |
SS_UDT_SCHEMA_NAME | 字符串 | 包含用户定义类型 (UDT) 的架构名称。 1 |
SS_UDT_ASSEMBLY_TYPE_NAME | 字符串 | 采用完全限定名称的用户定义类型 (UDT)。 1 |
SS_XML_SCHEMACOLLECTION_CATALOG_NAME | 字符串 | 在其中定义 XML 架构集合名称的目录的名称。 如果找不到目录名称,此变量则会包含一个空字符串。 1 |
SS_XML_SCHEMACOLLECTION_SCHEMA_NAME | 字符串 | 在其中定义 XML 架构集合名称的架构的名称。 如果找不到架构名称,则为空字符串。 1 |
SS_XML_SCHEMACOLLECTION_NAME | 字符串 | XML 架构集合的名称。 如果找不到名称,则为空字符串。 1 |
SS_DATA_TYPE | tinyint | 扩展存储过程使用的 SQL Server 数据类型。 注意: 有关 SQL Server 返回的数据类型的详细信息,请参阅 SQL Server 联机丛书中的“数据类型 (Transact-SQL)”。 |
(1) 如果正连接到 SQL Server 2005 (9.x),此列将不会出现。
备注
有关 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 (9.x))和关联的数值常量 | 连接到 SQL Server 2008 (10.0.x) 或更高版本时 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 方法返回 AdventureWorks2022 示例数据库中的 Person.Contact 表的信息。
import java.sql.*;
public class c1 {
public static void main(String[] args) {
String connectionUrl = "jdbc:sqlserver://localhost:1433;encrypt=true;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 类