Java アプリケーションでデータベース・データ・タイプにマップするデータ・タイプ

効率的な JDBC および SQLJ プログラムを作成するには、Java™ データ・タイプと表列データ・タイプの間の最適なマッピングを使用する必要があります。

以下の表は、 Linux®、UNIX、および Windows システム上の Db2®Db2 for z/OS®、または IBM® Informix® システムの JDBC およびデータベース・データ・タイプへの Java データ・タイプのマッピングを要約しています。

表列を更新するためのデータ・タイプ

次の表は、 PreparedStatement.setXXX または ResultSet.updateXXX JDBC プログラムのメソッド、および SQLJ プログラムの入力ホスト式のデータベース・データ・タイプへの Java データ・タイプのマッピングを要約しています。 複数の Java データ・タイプがリストされている場合、最初のデータ・タイプが推奨されるデータ・タイプです。

表 1. データベース表を更新するためのデータ・サーバー・データ・タイプへの Java データ・タイプのマッピング
Java データ型 データベース・データ・タイプ
short、java.lang.Short SMALLINT
boolean1、バイト1、 java.lang.Boolean、 java.lang.Byte SMALLINT
int、java.lang.Integer INTEGER
long、java.lang.Long 大桁整数 (BIGINT) 型13
java.math.BigInteger 大桁整数 (BIGINT) 型12
java.math.BigInteger CHAR (n)125
float、java.lang.Float REAL
double、java.lang.Double DOUBLE
java.math.BigDecimal DECIMAL (p,s)2
java.math.BigDecimal DECFLOAT (n)34
java.lang.String CHAR (n)5
java.lang.String GRAPHIC (m)6
java.lang.String VARCHAR (n)7
java.lang.String VARGRAPHIC (m)8
java.lang.String CLOB9
java.lang.String XML11
byte[] CHAR (n) ビット・データ用5
byte[] VARCHAR (n) ビット・データ用7
byte[] BINARY (n)514
byte[] VARBINARY (n)714
byte[] BLOB9
byte[] ROWID
byte[] XML11
java.sql.Blob BLOB
java.sql.Blob XML11
java.sql.Clob CLOB
java.sql.Clob DBCLOB10
java.sql.NClob DBCLOB10
java.sql.Clob XML11
java.sql.Date 日数
java.sql.Time 時間
java.sql.Timestamp TIMESTAMP、TIMESTAMP (p)、TIMESTAMP WITH TIME ZONE、TIMESTAMP (p) WITH TIME ZONE1516
java.io.ByteArrayInputStream BLOB
java.io.StringReader CLOB
java.io.ByteArrayInputStream CLOB
java.io.InputStream XML11
com.ibm.db2.jcc.DB2RowID (非推奨) ROWID
java.sql.RowId ROWID
com.ibm.db2.jcc.DB2Xml (非推奨) XML11
java.sql.SQLXML XML11
java.util.Date CHAR (n)125
java.util.Date VARCHAR (n)125
java.util.Date 日付12
java.util.Date 時刻12
java.util.Date TIMESTAMP、TIMESTAMP (p)、TIMESTAMP WITH TIME ZONE、TIMESTAMP (p) WITH TIME ZONE121516
java.util.Calendar CHAR (n)125
java.util.Calendar VARCHAR (n)125
java.util.Calendar 日付12
java.util.Calendar 時刻12
java.util.Calendar TIMESTAMP、TIMESTAMP (p)、TIMESTAMP WITH TIME ZONE、TIMESTAMP (p) WITH TIME ZONE121516
注:
  1. 列の更新の場合、データ・サーバーには Java ブール・データ・タイプまたはバイト・データ・タイプとまったく同等のものはありませんが、最適なのは SMALLINT です。
  2. p は 10 進数精度で、s は表列のスケールです。

    java.math.BigDecimal 列が DECIMAL 列にマップするように金融アプリケーションを設計するとします。 DECIMAL 列の精度およびスケールがわかっている場合、DECIMAL 列のデータを java.math.BigDecimal 変数の持つデータで更新すると、他のデータ・タイプの組み合わせを使用する場合よりもパフォーマンスが向上します。

  3. n=16 または n=34。
  4. DECFLOAT は、 Db2 for z/OSDb2 on Linux、UNIX、および Windows システム、または Db2 for IBM i データ・サーバーへの接続に有効です。 DECFLOAT を使用するには、SDK for Java バージョン 5 (1.5) 以降が必要です。
  5. n< =254
  6. m< =127。
  7. n< =32672
  8. m< =16336
  9. このマッピングは、データ・サーバーが列のデータ・タイプを判別できる場合にのみ有効です。
  10. プロパティー useJDBC4DataType が DB2BaseDataSource.NO に設定されている場合には、java.sql.Clob を使用します。 プロパティー useJDBC4DataType が設定されていないか、または DB2BaseDataSource.YES に設定されている場合は、java.sql.NClob を使用します。
  11. XML は、 Db2 for z/OS または Linux、UNIX、および Windows システム上のDb2 データ・サーバーへの接続に対して有効です。
  12. このマッピングは、 IBM Data Server Driver for JDBC and SQLJ バージョン 4.13 以降でのみ有効です。
  13. BIGINT は、 Db2 for z/OS データ・サーバー、 Db2 on Linux、UNIX、および Windows システム データ・サーバー、および Db2 for IBM i データ・サーバーへの接続に有効です。
  14. BINARY および VARBINARY は、 Db2 for z/OS データ・サーバー、 Db2 for IBM i 5/OS 以降のデータ・サーバー、または Linux、UNIX、および Windows システム上のDb2 データ・サーバーへの接続に有効です。
  15. p は、タイム・スタンプの精度を示しています。これは、タイム・スタンプの小数部分の桁数です。 0 < =p< = 12。 デフォルトは 6 です。 TIMESTAMP (p) は、 Linux、UNIX、および Windows システム上の Db2 および Db2 for z/OSへの接続でサポートされます。
  16. WITH TIME ZONE 節は、 Db2 for z/OS への接続でのみサポートされます。

表列を検索するためのデータ・タイプ

以下の表は、 Db2 または IBM Informix データ・タイプから、 JDBC プログラムの ResultSet.getXXX メソッドおよび SQLJ プログラムのイテレーターの Java データ・タイプへのマッピングを要約したものです。 この表には、 ResultSet.getObjectを使用して取得される Java 数値ラッパー・オブジェクト・タイプはリストされていません。

表 2. データ・サーバー・テーブルからデータを取得するためのデータ・サーバー・データ・タイプから Java データ・タイプへのマッピング
SQL データ・タイプ 推奨される Java データ型または Java オブジェクト型 その他のサポートされる Java データ型
SMALLINT short byte、int、long、float、double、 java.math.BigDecimal、boolean、 java.lang.String
INTEGER int short、byte、long、float、double、 java.math.BigDecimal、boolean、 java.lang.String
大桁整数 (BIGINT) 型6 long int、short、byte、float、double、 java.math.BigDecimal、boolean、 java.lang.String
DECIMAL(p,s) または NUMERIC(p,s) java.math.BigDecimal long、int、short、byte、float、 double、boolean、java.lang.String
DECFLOAT (n)12 java.math.BigDecimal long、int、short、byte、float、 double、java.math.BigDecimal、 boolean、java.lang.String
REAL 浮動小数点 long、int、short、byte、double、 java.math.BigDecimal、boolean、 java.lang.String
DOUBLE double long、int、short、byte、float、 java.math.BigDecimal、boolean、 java.lang.String
CHAR (n) 型 java.lang.String long、int、short、byte、float、 double、java.math.BigDecimal、 boolean、java.sql.Date、 java.sql.Time、java.sql.Timestamp、 java.io.InputStream、java.io.Reader
VARCHAR (n) (VARCHAR (n)) java.lang.String long、int、short、byte、float、 double、java.math.BigDecimal、 boolean、java.sql.Date、 java.sql.Time、java.sql.Timestamp、 java.io.InputStream、java.io.Reader
ビット・データの CHAR (n) byte[] java.lang.String, java.io.InputStream, java.io.Reader
VARCHAR (n) ビット・データ用 byte[] java.lang.String, java.io.InputStream, java.io.Reader
BINARY (n)7 byte[] なし
VARBINARY (n)7 byte[] なし
GRAPHIC () java.lang.String long、int、short、byte、float、 double、java.math.BigDecimal、 boolean、java.sql.Date、 java.sql.Time、java.sql.Timestamp、 java.io.InputStream、java.io.Reader
VARGRAPHIC (m) java.lang.String long、int、short、byte、float、 double、java.math.BigDecimal、 boolean、java.sql.Date、 java.sql.Time、java.sql.Timestamp、 java.io.InputStream、java.io.Reader
CLOB (n) (CLOB (n)) java.sql.Clob java.lang.String
BLOB (n) java.sql.Blob byte []3
DBCLOB (m) 完全に同等のものはありません。5  
ROWID java.sql.RowId byte[]、com.ibm.db2.jcc.DB2RowID (非推奨)
XML4 java.sql.SQLXML byte[]、java.lang.String、 java.io.InputStream、java.io.Reader
日数 java.sql.Date java.sql.String, java.sql.Timestamp
時間 java.sql.Time java.sql.String, java.sql.Timestamp
TIMESTAMP、TIMESTAMP (p)、TIMESTAMP WITH TIME ZONE、TIMESTAMP (p) WITH TIME ZONE89 java.sql.Timestamp java.sql.String, java.sql.Date, java.sql.Time, java.sql.Timestamp
注:
  1. n=16 または n=34。
  2. DECFLOAT は、 Db2 for z/OSDb2 on Linux、UNIX、および Windows システム、または Db2 for IBM i データ・サーバーへの接続に有効です。 DECFLOAT を使用するには、SDK for Java バージョン 5 (1.5) 以降が必要です。
  3. このマッピングは、データ・サーバーが列のデータ・タイプを判別できる場合にのみ有効です。
  4. XML は、 Db2 for z/OS または Linux、UNIX、および Windows システム上のDb2 データ・サーバーへの接続に対して有効です。
  5. プロパティー useJDBC4DataType が DB2BaseDataSource.NO に設定されている場合には、java.sql.Clob を使用します。 プロパティー useJDBC4DataType が設定されていないか、または DB2BaseDataSource.YES に設定されている場合は、java.sql.NClob を使用します。
  6. BIGINT は、 Db2 for z/OS データ・サーバー、 Linux、UNIX、および Windows システム上の Db2 データ・サーバー、およびサポートされるすべての Db2 ( IBM i の場合) データ・サーバーへの接続に有効です。
  7. BINARY および VARBINARY は、 Db2 for z/OS データ・サーバー、 Db2 for IBM i 5/OS V5R3 以降のデータ・サーバー、または Linux、UNIX、および Windows システム上のDb2 データ・サーバーへの接続に有効です。
  8. p は、タイム・スタンプの精度を示しています。これは、タイム・スタンプの小数部分の桁数です。 0 < =p< = 12。 デフォルトは 6 です。 TIMESTAMP (P) は、 Linux、UNIX、および Windows システム上の Db2 V9.7 以降および Db2 for z/OS V10 以降への接続でのみサポートされます。
  9. WITH TIME ZONE 節は、 Db2 for z/OS への接続でのみサポートされます。

ストアード・プロシージャーおよびユーザー定義関数を呼び出すためのデータ・タイプ

次の表は、Java データ・タイプから JDBC データ・タイプへのマッピングと、ユーザー定義関数およびストアード・プロシージャー・パラメーターを呼び出すための Db2 または IBM Informix データ・タイプへのマッピングを要約したものです。 Java データ型から JDBC データ型へのマッピングは、 JDBC プログラムの CallableStatement.registerOutParameter メソッド用です。 Java データ・タイプからデータ・サーバー・データ・タイプへのマッピングは、ストアード・プロシージャーまたはユーザー定義関数の呼び出しのパラメーター用です。

以下の表に複数の Java データ型がリストされている場合、最初のデータ型が 推奨される データ型です。

表 3. ストアード・プロシージャーおよびユーザー定義関数を呼び出すための Java、 JDBC、および SQL データ・タイプのマッピング
Java データ型 JDBC データ・タイプ SQL データ・タイプ
boolean3、 java.lang.Boolean BOOLEAN BOOLEAN12
boolean3、 java.lang.Boolean BIT SMALLINT
バイト3、 java.lang.Byte TINYINT SMALLINT
short、java.lang.Short SMALLINT SMALLINT
int、java.lang.Integer INTEGER INTEGER
long、java.lang.Long BIGINT 大桁整数 (BIGINT) 型7
float、java.lang.Float REAL REAL
float、java.lang.Float FLOAT REAL
double、java.lang.Double DOUBLE DOUBLE
java.math.BigDecimal NUMERIC DECIMAL
java.math.BigDecimal DECIMAL DECIMAL
java.math.BigDecimal java.types.OTHER DECFLOATn4
java.math.BigDecimal com.ibm.db2.jcc.DB2Types.DECFLOAT DECFLOATn4
java.lang.String CHAR CHAR
java.lang.String CHAR GRAPHIC
java.lang.String VARCHAR VARCHAR
java.lang.String VARCHAR VARGRAPHIC
java.lang.String LONGVARCHAR VARCHAR
java.lang.String VARCHAR CLOB
java.lang.String LONGVARCHAR CLOB
java.lang.String CLOB CLOB
byte[] BINARY CHAR FOR BIT DATA
byte[] VARBINARY VARCHAR FOR BIT DATA
byte[] BINARY BINARY6
byte[] VARBINARY VARBINARY6
byte[] LONGVARBINARY VARCHAR FOR BIT DATA
byte[] VARBINARY BLOB5
byte[] LONGVARBINARY BLOB5
java.sql.Date 日数 日数
java.sql.Time 時刻 時間
java.sql.Timestamp TIMESTAMP TIMESTAMP、TIMESTAMP (p)、TIMESTAMP WITH TIME ZONE、TIMESTAMP (p) WITH TIME ZONE89
java.sql.Blob BLOB BLOB
java.sql.Clob CLOB CLOB
java.sql.Clob CLOB DBCLOB
java.io.ByteArrayInputStream なし BLOB
java.io.StringReader なし CLOB
java.io.ByteArrayInputStream なし CLOB
com.ibm.db2.jcc.DB2RowID (非推奨) com.ibm.db2.jcc.DB2Types.ROWID ROWID
java.sql.RowId java.sql.Types.ROWID ROWID
com.ibm.db2.jcc.DB2Xml (非推奨) com.ibm.db2.jcc.DB2Types.XML XML AS CLOB
java.sql.SQLXML java.sql.Types.SQLXML XML
java.sql.SQLXML java.sql.Types.SQLXML XML AS CLOB
java.sql.Array java.sql.Types.ARRAY 配列2
java.sql.Struct java.sql.Types.STRUCT ROW12
java.sql.ResultSet com.ibm.db2.jcc.DB2Types.CURSOR CURSOR タイプ2
注:
  1. このパラメーター・データ・タイプは、 IBM Data Server Driver for JDBC and SQLJ タイプ 4 接続 から Db2 ( Linux、UNIX、および Windows システムの場合) でのみサポートされます。
  2. このパラメーター・データ・タイプは、ストアード・プロシージャーの呼び出しにのみサポートされています。
  3. SMALLINT パラメーターを指定して定義されたストアード・プロシージャーまたはユーザー定義関数は、boolean パラメーターまたは byte パラメーターを指定して呼び出すことができます。 ただし、これは推奨されていません。
  4. Java ルーチンの DECFLOAT パラメーターは、 Db2 for z/OS データ・サーバーへの接続にのみ有効です。 Java ルーチンの DECFLOAT パラメーターは、 for Linux、UNIX、および Windows または Db2 for IBM iへの接続ではサポートされません。 DECFLOAT を使用するには、SDK for Java バージョン 5 (1.5) 以降が必要です。
  5. このマッピングは、データ・サーバーが列のデータ・タイプを判別できる場合にのみ有効です。
  6. BINARY および VARBINARY は、 Db2 for z/OS データ・サーバー、 Db2 for IBM i 5/OS V5R3 以降のデータ・サーバー、または Linux、UNIX、および Windows システム上のDb2 データ・サーバーへの接続に有効です。
  7. BIGINT は、 Db2 for z/OS データ・サーバーおよび Linux、UNIX、および Windows システム上のDb2 データ・サーバーへの接続に有効です。
  8. p は、タイム・スタンプの精度を示しています。これは、タイム・スタンプの小数部分の桁数です。 0 < =p< = 12。 デフォルトは 6 です。 TIMESTAMP (p) は、 Linux、UNIX、および Windows システム上の Db2 および Db2 for z/OSへの接続でサポートされます。
  9. WITH TIME ZONE 節は、 Db2 for z/OSへの接続でサポートされます。

Java ストアード・プロシージャーおよびユーザー定義関数のデータ・タイプ

次の表は、CREATE PROCEDURE または CREATE FUNCTION ステートメント内の SQL パラメーター・データ・タイプと、対応する Java ストアード・プロシージャーまたはユーザー定義関数メソッド内のデータ・タイプとのマッピングを要約したものです。

Linux、UNIX、および Windows システム上の Db2では、1 つの SQL データ・タイプに対して複数の Java データ・タイプがリストされている場合、 最初 Java データ・タイプのみが有効です。

Db2 for z/OSでは、複数の Java データ・タイプがリストされ、最初のデータ・タイプ以外のデータ・タイプをメソッド・パラメーターとして使用する場合、メソッド・パラメーターの Java データ・タイプを指定する CREATE PROCEDURE または CREATE FUNCTION ステートメントの EXTERNAL 節にメソッド・シグニチャーを組み込む必要があります。

表 4. CREATE PROCEDURE または CREATE FUNCTION ステートメント内の SQL データ・タイプの、対応する Java ストアード・プロシージャーまたはユーザー定義関数プログラム内のデータ・タイプへのマッピング
CREATE PROCEDURE または CREATE FUNCTION での SQL データ・タイプ Java ストアード・プロシージャーまたはユーザー定義関数メソッドのデータ・タイプ2
SMALLINT short、java.lang.Integer
ブール値1 ブール
INTEGER int、java.lang.Integer
大桁整数 (BIGINT) 型3 long、java.lang.Long
REAL float、java.lang.Float
DOUBLE double、java.lang.Double
DECIMAL java.math.BigDecimal
DECFLOAT4 java.math.BigDecimal
CHAR java.lang.String
VARCHAR java.lang.String
CHAR FOR BIT DATA byte[]
VARCHAR FOR BIT DATA byte[]
BINARY5 byte[]
VARBINARY5 byte[]
日数 java.sql.Date
時間 java.sql.Time
TIMESTAMP、TIMESTAMP (p)、TIMESTAMP WITH TIME ZONE、TIMESTAMP (p) WITH TIME ZONE67 java.sql.Timestamp
BLOB java.sql.Blob
CLOB java.sql.Clob
DBCLOB java.sql.Clob
ROWID java.sql.Types.ROWID
配列1 java.sql.Array
1 java.sql.Struct
XML AS CLOB java.sql.Types.SQLXML
注:
  1. このパラメーター・データ・タイプは、ストアード・プロシージャーにのみサポートされています。
  2. Linux、UNIX、および Windows システム上の Db2 サーバー上のストアード・プロシージャーまたはユーザー定義関数の場合、 最初 データ・タイプのみが有効です。
  3. BIGINT は、 Db2 for z/OS データ・サーバーまたは Linux、UNIX、および Windows システム上のDb2 データ・サーバーへの接続に有効です。
  4. Java ルーチンの DECFLOAT パラメーターは、 Db2 for z/OS データ・サーバーへの接続にのみ有効です。 Java ルーチンの DECFLOAT パラメーターは、 for Linux、UNIX、および Windows または Db2 for IBM iへの接続ではサポートされません。 DECFLOAT を使用するには、SDK for Java バージョン 5 (1.5) 以降が必要です。
  5. BINARY および VARBINARY は、 Db2 for z/OS データ・サーバー、 Db2 for IBM i 5/OS 以降のデータ・サーバー、または Linux、UNIX、および Windows システム上のDb2 データ・サーバーへの接続に有効です。
  6. p は、タイム・スタンプの精度を示しています。これは、タイム・スタンプの小数部分の桁数です。 0 < =p< = 12。 デフォルトは 6 です。 TIMESTAMP (P) は、 Linux、UNIX、および Windows システム上の Db2 データ・サーバーおよび Db2 for z/OS データ・サーバーへの接続でサポートされます。
  7. WITH TIME ZONE 節は、 Db2 for z/OS データ・サーバーへの接続でサポートされます。