Java 获取ResultSet列的数据类型

Java 获取ResultSet列的数据类型,java,sql-server,jdbc,Java,Sql Server,Jdbc,我正在使用SQL Server。我的表中有一列的数据类型为datetime2 我正在使用ResultSet访问表数据。我需要获取列的数据类型。方法rs.getColumnTypeName()返回数据库数据类型datetime2的nvarchar 是否有任何方法可以获取相同的datetime2或Timestamp?如果您使用Java进行此操作,则有一个类ResultSetMetaData 您可以使用ResultSetMetaData.getColumnClassName()获取类的完全限定名 例如

我正在使用SQL Server。我的表中有一列的数据类型为
datetime2

我正在使用
ResultSet
访问表数据。我需要获取列的数据类型。方法
rs.getColumnTypeName()
返回数据库数据类型
datetime2
nvarchar


是否有任何方法可以获取相同的
datetime2
Timestamp

如果您使用Java进行此操作,则有一个类
ResultSetMetaData

您可以使用
ResultSetMetaData.getColumnClassName()
获取类的完全限定名

例如,如果数据库中的数据类型为
VARCHAR
,则返回的值为
java.lang.String

还可以尝试使用
ResultSetMetaData.getColumnLabel()
——看看它是否适用于您的情况


您好,您遇到的问题很可能与您正在使用的SQL Server的JDBC驱动程序有关。如果可以,请下载最新版本6.0 type 4.2。在此版本的SQL Server驱动程序中,您将能够获得:(a)metaData.getColumnType=93-在2.0中,您可以获得-9(b)metaData.getColumnClassName(…)/java.SQL.Timestamp。简而言之,驱动程序版本2.0不支持datetime2。因此,您不应该将datetime2用于较旧的驱动程序版本。尝试升级以获得正确的元数据和结果。您还可以从
ResultSetMetaData.getColumnType()
获取整数值,并将其与
java.sql.Types
中的一个常量进行比较,以检查它是否为特定类型。这更接近数据库模式本身,因为您可以区分不同的数据库类型(例如
NVARCHAR
VARCHAR
INTEGER
NUMERIC
),它们都解析为相同的Java类型(例如
String
int
)我认为他的问题是元数据对于实际的DB列没有意义。MicrosoftSQLServer列是DATETIME2。但尽管如此,resultset返回的类型是“string”,列的类型是nvarchar。这很可能是JDBC驱动程序版本的错误(例如JDBC驱动程序版本2)