目次 | 前の項目 | 次の項目 | JDBCTM ガイド: 入門 |
ResultSet.getBigDecimal()
メソッドが追加されました。
ResultSetMetaData.getColumnType()
メソッドからは、SQL 型の新しいコードの STRUCT
、DISTINCT
、BLOB
などが返されるようになっています。使われているマッピングがデフォルトかカスタムかにかかわらず、構造化された値には STRUCT
型のコードが、重複を取り除いた値には DISTINCT
型のコードが、必ず返されます。
新しい SQL 型に対し、ResultSetMetaData.getColumnTypeName()
メソッドからは次の値が返されます。
列の型 | 列の型の名前 |
JAVA_OBJECT | Java 型の SQL 名 |
DISTINCT | 弁別型の SQL 名 |
STRUCT | 構造化型の SQL 名 |
ARRAY | データソースに依存する型の名前 |
BLOB | データソースに依存する型の名前 |
CLOB | データソースに依存する型の名前 |
REF | データソースに依存する型の名前 |
ResultSet.getObject()
を呼び出して列から値を取得する場合に、インスタンスが生成された Java クラスの絶対名を返すため、ResultSetMetaData.getColumnClassName()
メソッドが追加されました。詳細については、別途提供されている API ドキュメントを参照してください。
型コードが STRUCT、DISTINCT、または JAVA_OBJECT の場合、ResultSetMetaData.getColumnTypeName()
メソッドからは SQL 型の完全な名前が返されます。
DatabaseMetaData.getColumns()
メソッドからは、BLOB や CLOB など、SQL3 の新しい型の DATA_TYPE 値が返されるようになります。このメソッドからは、10.2 項の一覧で示した SQL3 のデータ型と同じ名前が返されます。
メタデータオブジェクトを生成した Connection
オブジェクトを返す DatabasemetaData.getConnection()
メソッドが追加されました。
DatabasemetaData.getUDTs()
メソッドが追加されました。詳細については、別途提供されている API ドキュメントを参照してください。
supportsResultSetConcurrency()
や supportsBatchUpdates()
など、新しい ResultSet
とバッチ更新機能をサポートするメソッドが追加されました。詳細については、別途提供されている API ドキュメントを参照してください。
java.io.PrintWriter
オブジェクトを入力として受け取る DriverManager.setLogWriter()
メソッドが追加されました。また、新しい DriverManager.getLogWriter()
メソッドは PrintWriter
オブジェクトを返します。setLogStream()
メソッドと getLogStream()
メソッドは推奨されなくなりました。
Calendar
を利用して、特定のタイムゾーンに対する Date
、Time
、および Timestamp
の値を取得または設定できます。次はその例です。
このメソッドからはResultSet rs; ... Date date1 = rs.getDate(1);
Date
オブジェクトが返されますが、このオブジェクトは、デフォルトのタイムゾーンでの特定の日付 (1999 年 1 月 3 日など) と正規化された時刻 00:00:00 を表すミリ秒単位の値をラップしています。SQL の DATE 型の値には時刻の要素がないので、Date オブジェクトの時刻要素にはデフォルトのタイムゾーンでの 0 が設定されます。getDate()
に対して Calendar
が明示的に指定されなかったため、背後のデータベースにはタイムゾーンの情報が格納されていないと見なされて、JDBC ドライバの内部では、デフォルトのタイムゾーン (実際にはデフォルトの Calendar
) を使って適切なミリ秒の値が作成されます。
次の例では、グリニッジ標準時 (GMT) で表した日付を取得しています。
ResultSet rs; ... TimeZone.setDefault(TimeZone.getTimeZone("GMT")); Calendar cal = Calendar.getInstance(); Date date2 = rs.getDate(1, cal);
上の例では、Calendar
を getDate()
メソッドに明示的に渡し、適切なミリ秒の値を計算する方法を JDBC ドライバに通知しています。デフォルトのタイムゾーンを変更し、JDBC ドライバに Calendar
を明示的に渡さないようにしても、同じ結果を得ることができます。タイムゾーンを指定しないと、JDBC ドライバはデフォルトのタイムゾーンを使います。
上の例で作成される 2 つの Date
オブジェクトが「同じ」日付を示す場合でも、デフォルトのタイムゾーンが GMT でないとすると、2 つのオブジェクトは等しくなりません。
if (date1.equals(date2)) //never get here
これは、Java 言語の Date
オブジェクトのそれぞれは、実際には正規化されたミリ秒単位の時刻の値をラップしているだけで、この値はタイムゾーンによって異なります。アプリケーションで異なるタイムゾーンの日付を比較する場合は、Calendar
に変換してから行う必要があります。
アプリケーションでは、Calendar
を使って Date
オブジェクトを作成する必要があります。Calendar
を使うときは、目的の日付の時刻として 00:00:00 を指定しなければなりません。これは、JDBC がこのような規則を使っているためです。さらに、Time
の値を作成するときは、Time
のミリ秒値を作成するために使う Calendar
に、1970 年 1 月 1 日という日付を指定する必要があります。JDBC では時刻に対してこのような規則が指定されているためです。