| 目次 | 前の項目 | 次の項目 | 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 など、SQL99 の新しい型の DATA_TYPE 値が返されるようになります。 このメソッドからは、10.2 項の一覧で示した SQL99 のデータ型と同じ名前が返されます。
メタデータオブジェクトを生成した 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 API がこのような規則を使っているためです。さらに、Time の値を作成するときは、Time のミリ秒値を作成するために使う Calendar に、1970 年 1 月 1 日という日付を指定する必要があります。時刻に対してこのような規則が指定されているためです。
JDBC に準拠したドライバは、SQL92 トランジショナルレベルで指定された DROP TABLE コマンドをサポートする必要があります。ただし、JDBC 準拠のドライバが DROP TABLE の CASCADE および RESTRICT オプションをサポートするかどうかは任意です。また、削除中のテーブルを参照する定義済みのビューや整合性制約が存在する場合、DROP TABLE 機能は、その実装が定義されます。