DB2 Type Support
Foundations JDBC provides support for IBM DB2's type system, including DECFLOAT, double-byte character types (GRAPHIC/VARGRAPHIC/DBCLOB), XML, and ROWID.
Integer Types
| DB2 Type | Java Type | Notes |
|---|---|---|
SMALLINT | Short | 16-bit integer |
INTEGER / INT | Integer | 32-bit integer |
BIGINT | Long | 64-bit integer |
- Kotlin
- Java
- Scala
val smallType: Db2Type<Short> = Db2Types.smallint
val intType: Db2Type<Int> = Db2Types.integer
val bigType: Db2Type<Long> = Db2Types.bigint
Db2Type<Short> smallType = Db2Types.smallint;
Db2Type<Integer> intType = Db2Types.integer;
Db2Type<Long> bigType = Db2Types.bigint;
val smallType: Db2Type[Short] = Db2Types.smallint
val intType: Db2Type[Int] = Db2Types.integer
val bigType: Db2Type[Long] = Db2Types.bigint
Fixed-Point Types
| DB2 Type | Java Type | Notes |
|---|---|---|
DECIMAL / NUMERIC | BigDecimal | Exact numeric |
DECIMAL(p,s) | BigDecimal | With precision and scale |
DECFLOAT | BigDecimal | DB2-specific decimal floating point (16 or 34 digits) |
- Kotlin
- Java
- Scala
val decType: Db2Type<BigDecimal> = Db2Types.decimal
val preciseType: Db2Type<BigDecimal> = Db2Types.decimalOf(10, 2)
val decfloatType: Db2Type<BigDecimal> = Db2Types.decfloat
val decfloat16: Db2Type<BigDecimal> = Db2Types.decfloatOf(16)
Db2Type<BigDecimal> decType = Db2Types.decimal;
Db2Type<BigDecimal> preciseType = Db2Types.decimalOf(10, 2);
Db2Type<BigDecimal> decfloatType = Db2Types.decfloat;
Db2Type<BigDecimal> decfloat16 = Db2Types.decfloatOf(16);
val decType: Db2Type[BigDecimal] = Db2Types.decimal
val preciseType: Db2Type[BigDecimal] = Db2Types.decimalOf(10, 2)
val decfloatType: Db2Type[BigDecimal] = Db2Types.decfloat
val decfloat16: Db2Type[BigDecimal] = Db2Types.decfloatOf(16)
Floating-Point Types
| DB2 Type | Java Type | Notes |
|---|---|---|
REAL | Float | Single precision |
DOUBLE / FLOAT | Double | Double precision |
- Kotlin
- Java
- Scala
val realType: Db2Type<Float> = Db2Types.real
val doubleType: Db2Type<Double> = Db2Types.double_
Db2Type<Float> realType = Db2Types.real;
Db2Type<Double> doubleType = Db2Types.double_;
val realType: Db2Type[Float] = Db2Types.real
val doubleType: Db2Type[Double] = Db2Types.double_
Boolean
| DB2 Type | Java Type | Notes |
|---|---|---|
BOOLEAN | Boolean | Native since DB2 11.1 |
- Kotlin
- Java
- Scala
val boolType: Db2Type<Boolean> = Db2Types.boolean_
Db2Type<Boolean> boolType = Db2Types.boolean_;
val boolType: Db2Type[Boolean] = Db2Types.boolean_
String Types (Single-Byte)
| DB2 Type | Java Type | Notes |
|---|---|---|
CHAR / CHARACTER | String | Fixed-length |
CHAR(n) | String | Fixed-length with size |
VARCHAR | String | Variable-length |
VARCHAR(n) | String | Variable-length with size |
CLOB | String | Character Large Object |
- Kotlin
- Java
- Scala
val charType: Db2Type<String> = Db2Types.char_
val char10: Db2Type<String> = Db2Types.char_Of(10)
val varcharType: Db2Type<String> = Db2Types.varchar
val varchar255: Db2Type<String> = Db2Types.varcharOf(255)
val clobType: Db2Type<String> = Db2Types.clob
Db2Type<String> charType = Db2Types.char_;
Db2Type<String> char10 = Db2Types.char_Of(10);
Db2Type<String> varcharType = Db2Types.varchar;
Db2Type<String> varchar255 = Db2Types.varcharOf(255);
Db2Type<String> clobType = Db2Types.clob;
val charType: Db2Type[String] = Db2Types.char_
val char10: Db2Type[String] = Db2Types.char_Of(10)
val varcharType: Db2Type[String] = Db2Types.varchar
val varchar255: Db2Type[String] = Db2Types.varcharOf(255)
val clobType: Db2Type[String] = Db2Types.clob
String Types (Double-Byte)
DB2 has dedicated types for double-byte character set (DBCS) strings.
| DB2 Type | Java Type | Notes |
|---|---|---|
GRAPHIC | String | Fixed-length DBCS |
GRAPHIC(n) | String | Fixed-length DBCS with size |
VARGRAPHIC | String | Variable-length DBCS |
VARGRAPHIC(n) | String | Variable-length DBCS with size |
DBCLOB | String | Double-byte CLOB |
- Kotlin
- Java
- Scala
val graphicType: Db2Type<String> = Db2Types.graphic
val graphic10: Db2Type<String> = Db2Types.graphicOf(10)
val vargraphicType: Db2Type<String> = Db2Types.vargraphic
val dbclobType: Db2Type<String> = Db2Types.dbclob
Db2Type<String> graphicType = Db2Types.graphic;
Db2Type<String> graphic10 = Db2Types.graphicOf(10);
Db2Type<String> vargraphicType = Db2Types.vargraphic;
Db2Type<String> dbclobType = Db2Types.dbclob;
val graphicType: Db2Type[String] = Db2Types.graphic
val graphic10: Db2Type[String] = Db2Types.graphicOf(10)
val vargraphicType: Db2Type[String] = Db2Types.vargraphic
val dbclobType: Db2Type[String] = Db2Types.dbclob
DB2's JSON_OBJECT does not support GRAPHIC, VARGRAPHIC, or DBCLOB types. JSON serialization is not available for these types.
Binary Types
| DB2 Type | Java Type | Notes |
|---|---|---|
BINARY | byte[] | Fixed-length binary |
BINARY(n) | byte[] | Fixed-length binary with size |
VARBINARY | byte[] | Variable-length binary |
VARBINARY(n) | byte[] | Variable-length binary with size |
BLOB | byte[] | Binary Large Object |
- Kotlin
- Java
- Scala
val binaryType: Db2Type<ByteArray> = Db2Types.binary
val binary16: Db2Type<ByteArray> = Db2Types.binaryOf(16)
val varbinaryType: Db2Type<ByteArray> = Db2Types.varbinary
val blobType: Db2Type<ByteArray> = Db2Types.blob
Db2Type<byte[]> binaryType = Db2Types.binary;
Db2Type<byte[]> binary16 = Db2Types.binaryOf(16);
Db2Type<byte[]> varbinaryType = Db2Types.varbinary;
Db2Type<byte[]> blobType = Db2Types.blob;
val binaryType: Db2Type[Array[Byte]] = Db2Types.binary
val binary16: Db2Type[Array[Byte]] = Db2Types.binaryOf(16)
val varbinaryType: Db2Type[Array[Byte]] = Db2Types.varbinary
val blobType: Db2Type[Array[Byte]] = Db2Types.blob
DB2's JSON_OBJECT does not support BINARY, VARBINARY, or BLOB types. JSON serialization is not available for these types.
Date/Time Types
| DB2 Type | Java Type | Notes |
|---|---|---|
DATE | LocalDate | Naive date, no zone |
TIME | LocalTime | Naive time, no zone |
TIMESTAMP | LocalDateTime | Naive timestamp, no zone |
TIMESTAMP(p) | LocalDateTime | Naive timestamp with fractional-second precision |
- Kotlin
- Java
- Scala
val dateType: Db2Type<LocalDate> = Db2Types.date
val timeType: Db2Type<LocalTime> = Db2Types.time
val tsType: Db2Type<LocalDateTime> = Db2Types.timestamp
val ts6: Db2Type<LocalDateTime> = Db2Types.timestampOf(6)
Db2Type<LocalDate> dateType = Db2Types.date;
Db2Type<LocalTime> timeType = Db2Types.time;
Db2Type<LocalDateTime> tsType = Db2Types.timestamp;
Db2Type<LocalDateTime> ts6 = Db2Types.timestampOf(6);
val dateType: Db2Type[LocalDate] = Db2Types.date
val timeType: Db2Type[LocalTime] = Db2Types.time
val tsType: Db2Type[LocalDateTime] = Db2Types.timestamp
val ts6: Db2Type[LocalDateTime] = Db2Types.timestampOf(6)
All of DB2's temporal types are naive wall-clock values — the stored bytes represent a date/time as written, with no associated zone or offset. LocalDate, LocalTime, and LocalDateTime are the Java types that match this "no-zone" semantic exactly.
DB2 does have a TIMESTAMP WITH TIME ZONE syntax available in some environments, but its support is limited (it is not supported on LUW common configurations without explicit setup) and the library does not expose a dedicated mapping for it. For application-level "point in time" values, normalize to UTC before writing to a TIMESTAMP column, or store BIGINT epoch milliseconds.
Using Instant, OffsetDateTime, or ZonedDateTime would misrepresent the stored value — none of those Java types' semantics match a naive wall-clock.
Special Types
| DB2 Type | Java Type | Notes |
|---|---|---|
XML | Xml | Native XML support |
ROWID | byte[] | DB2 row identifier |
- Kotlin
- Java
- Scala
val xmlType: Db2Type<Xml> = Db2Types.xml
val rowidType: Db2Type<ByteArray> = Db2Types.rowid
Db2Type<Xml> xmlType = Db2Types.xml;
Db2Type<byte[]> rowidType = Db2Types.rowid;
val xmlType: Db2Type[Xml] = Db2Types.xml
val rowidType: Db2Type[Array[Byte]] = Db2Types.rowid
DB2's JSON_OBJECT does not support the XML type. JSON serialization is not available for XML columns.
Nullable Types
Any type can be made nullable using .opt():
- Kotlin
- Java
- Scala
val notNull: Db2Type<Int> = Db2Types.integer
val nullable: Db2Type<Int?> = Db2Types.integer.opt()
Db2Type<Integer> notNull = Db2Types.integer;
Db2Type<Optional<Integer>> nullable = Db2Types.integer.opt();
val notNull: Db2Type[Int] = Db2Types.integer
val nullable: Db2Type[Option[Int]] = Db2Types.integer.opt
Custom Domain Types
Wrap base types with custom Java types using transform:
- Kotlin
- Java
- Scala
// Wrapper type
data class ProductId(val value: Long)
// Create Db2Type from bigint
val productIdType: Db2Type<ProductId> = Db2Types.bigint.transform(::ProductId, ProductId::value)
// Wrapper type
public record ProductId(Long value) {}
// Create Db2Type from bigint
Db2Type<ProductId> productIdType = Db2Types.bigint.transform(ProductId::new, ProductId::value);
// Wrapper type
case class ProductId(value: Long)
// Create Db2Type from bigint
val productIdType: Db2Type[ProductId] = Db2Types.bigint.transform(ProductId.apply, _.value)