2012-10-10 33 views
7

SQL Serverを使用しています。私のテーブルにはデータ型がdatetime2の列があります。ResultSet列のデータ型を取得する

ResultSetを使用してテーブルデータにアクセスしています。列のデータ型を取得する必要があります。方法rs.getColumnTypeName()は、データベースデータタイプdatetime2の場合はnvarcharを返します。

datetime2またはTimestampを同じ方法で入手する方法はありますか?

+0

http://stackoverflow.com/a/220226/579580 – aviad

+0

こんにちは、あなたが経験している問題が最も可能性の高い使用しているSQL ServerのJDBCドライバに関連しているを見てみましょう。 可能であれば、最新バージョン6.0タイプ4.2をダウンロードしてください。 このバージョンのSQL Serverドライバでは、 (a)metaData.getColumnType = 93 - 2.0では-9(b)のmetaData.getColumnClassName(...)/ java.sql.Timestampを取得できます。要するに、datetime2はドライババージョン2.0で適切にサポートされていません。したがって、古いドライババージョンでdatetime2を使用しないでください。適切なメタデータと結果を得るためにアップグレードしてください。 – 99Sono

答えて

10

Javaで実行している場合は、クラスResultSetMetaDataがあります。

ResultSetMetaData.getColumnClassName()を使用して、クラスの完全修飾名を取得できます。

たとえば、データベースのデータ型がVARCHARの場合、返される値はjava.lang.Stringです。

ResultSetMetaData.getColumnLabel()もお試しください。あなたのケースで該当するかどうかを確認してください。

Java Documentation for ResultSetMetaData

+0

また、ResultSetMetaData.getColumnType()から整数値を取得し、それを特定の型であるかどうかを調べるためにjava.sql.Typesの定数の1つと比較することもできます。これは、すべてが同じJava型に解決されるさまざまなデータベース型(たとえば、 'NVARCHAR'、' VARCHAR'、 'INTEGER'、' NUMERIC')を区別できるので、データベーススキーマ自体に近いです(例えば 'String'、' int ')。 – ADTC

+0

彼の問題私は、メタデータが実際のDB列に意味をなさないと信じています。 Microsftのsqlserver列はDATETIME2です。しかし、それにもかかわらず、結果セットによって返される型は "文字列"であり、列の型はnvarcharです。これは、おそらくJDBCドライババージョン(たとえば、JDBCドライババージョン2)のバグであり、 – 99Sono

関連する問題