如何知道标记为从JDBC JTDS计算的列?

时间:2012-12-07 13:07:58

标签: sql-server-2008 jdbc jtds

我正在使用JTDS JDBC Driver。版本是1.2.4 假设我正在获取特定表的列元数据:

ResultSet columnsRs = meta.getColumns(null, [pattern], [table name], null);
while(columnRs.next()){
    // I would like to know here if the current column is marked computed
}

以下是ID计算字段

的表定义
CREATE TABLE [dbo].[C_Currencies](
    [CurrencyID] [int] IDENTITY(1,1) NOT NULL,
    [Name] [varchar](150) NOT NULL,
    [ID]  AS ([CurrencyID]),
 CONSTRAINT [pk_currency] PRIMARY KEY CLUSTERED 
(
    [CurrencyID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

1 个答案:

答案 0 :(得分:2)

根据Java 7中的DatabaseMetaData.getColumns JavaDoc,此信息将在IS_GENERATEDCOLUMN列中返回,其值为YESNO或空字符串(表示:未知) )。

这个专栏是在JDBC 4.0中添加的,据我所知,jTDS驱动程序只实现了JDBC 3.0。如果带有jTDS的ResultSet中不存在此列,那么您的选项要么切换到Microsoft SQL Server JDBC驱动程序(我假设它们的驱动程序支持此列),要么使用类似的东西自己查询SQL Server的系统视图(对于表ID中的列C_Currencies):

SELECT is_computed
FROM sys.tables t
INNER JOIN sys.columns c
    ON c.object_id = t.object_id
WHERE t.name = 'C_Currencies'
    AND c.name = 'ID'