SQL Serverを使用しています。私のテーブルにはデータ型がdatetime2
の列があります。ResultSet列のデータ型を取得する
ResultSet
を使用してテーブルデータにアクセスしています。列のデータ型を取得する必要があります。方法rs.getColumnTypeName()
は、データベースデータタイプdatetime2
の場合はnvarchar
を返します。
datetime2
またはTimestamp
を同じ方法で入手する方法はありますか?
SQL Serverを使用しています。私のテーブルにはデータ型がdatetime2
の列があります。ResultSet列のデータ型を取得する
ResultSet
を使用してテーブルデータにアクセスしています。列のデータ型を取得する必要があります。方法rs.getColumnTypeName()
は、データベースデータタイプdatetime2
の場合はnvarchar
を返します。
datetime2
またはTimestamp
を同じ方法で入手する方法はありますか?
Javaで実行している場合は、クラスResultSetMetaData
があります。
ResultSetMetaData.getColumnClassName()
を使用して、クラスの完全修飾名を取得できます。
たとえば、データベースのデータ型がVARCHAR
の場合、返される値はjava.lang.String
です。
ResultSetMetaData.getColumnLabel()
もお試しください。あなたのケースで該当するかどうかを確認してください。
また、ResultSetMetaData.getColumnType()から整数値を取得し、それを特定の型であるかどうかを調べるためにjava.sql.Typesの定数の1つと比較することもできます。これは、すべてが同じJava型に解決されるさまざまなデータベース型(たとえば、 'NVARCHAR'、' VARCHAR'、 'INTEGER'、' NUMERIC')を区別できるので、データベーススキーマ自体に近いです(例えば 'String'、' int ')。 – ADTC
彼の問題私は、メタデータが実際のDB列に意味をなさないと信じています。 Microsftのsqlserver列はDATETIME2です。しかし、それにもかかわらず、結果セットによって返される型は "文字列"であり、列の型はnvarcharです。これは、おそらくJDBCドライババージョン(たとえば、JDBCドライババージョン2)のバグであり、 – 99Sono
http://stackoverflow.com/a/220226/579580 – aviad
こんにちは、あなたが経験している問題が最も可能性の高い使用している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