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