Jdbc-data-types
JDBC-データ型
JDBCドライバーは、データベースに送信する前にJavaデータ型を適切なJDBC型に変換します。 ほとんどのデータ型に対してデフォルトのマッピングを使用します。 たとえば、Java intはSQL INTEGERに変換されます。 デフォルトのマッピングは、ドライバー間の一貫性を提供するために作成されました。
次の表は、PreparedStatementまたはCallableStatementオブジェクトのsetXXX()メソッドまたはResultSet.updateXXX()メソッドを呼び出すときに、Javaデータ型が変換されるデフォルトのJDBCデータ型をまとめたものです。
SQL | JDBC/Java | setXXX | updateXXX |
---|---|---|---|
VARCHAR | java.lang.String | setString | updateString |
CHAR | java.lang.String | setString | updateString |
LONGVARCHAR | java.lang.String | setString | updateString |
BIT | boolean | setBoolean | updateBoolean |
NUMERIC | java.math.BigDecimal | setBigDecimal | updateBigDecimal |
TINYINT | byte | setByte | updateByte |
SMALLINT | short | setShort | updateShort |
INTEGER | int | setInt | updateInt |
BIGINT | long | setLong | updateLong |
REAL | float | setFloat | updateFloat |
FLOAT | float | setFloat | updateFloat |
DOUBLE | double | setDouble | updateDouble |
VARBINARY | byte[ ] | setBytes | updateBytes |
BINARY | byte[ ] | setBytes | updateBytes |
DATE | java.sql.Date | setDate | updateDate |
TIME | java.sql.Time | setTime | updateTime |
TIMESTAMP | java.sql.Timestamp | setTimestamp | updateTimestamp |
CLOB | java.sql.Clob | setClob | updateClob |
BLOB | java.sql.Blob | setBlob | updateBlob |
ARRAY | java.sql.Array | setARRAY | updateARRAY |
REF | java.sql.Ref | SetRef | updateRef |
STRUCT | java.sql.Struct | SetStruct | updateStruct |
JDBC 3.0では、BLOB、CLOB、ARRAY、およびREFデータ型のサポートが強化されています。 ResultSetオブジェクトには、サーバー上の各データを直接操作できるupdateBLOB()、updateCLOB()、updateArray()、およびupdateRef()メソッドが追加されました。
setXXX()およびupdateXXX()メソッドを使用すると、特定のJava型を特定のJDBCデータ型に変換できます。 メソッドsetObject()およびupdateObject()を使用すると、ほとんどすべてのJava型をJDBCデータ型にマップできます。
ResultSetオブジェクトは、列の値を取得するために各データ型に対応するgetXXX()メソッドを提供します。 各メソッドは、列名またはその順序位置で使用できます。
SQL | JDBC/Java | setXXX | getXXX |
---|---|---|---|
VARCHAR | java.lang.String | setString | getString |
CHAR | java.lang.String | setString | getString |
LONGVARCHAR | java.lang.String | setString | getString |
BIT | boolean | setBoolean | getBoolean |
NUMERIC | java.math.BigDecimal | setBigDecimal | getBigDecimal |
TINYINT | byte | setByte | getByte |
SMALLINT | short | setShort | getShort |
INTEGER | int | setInt | getInt |
BIGINT | long | setLong | getLong |
REAL | float | setFloat | getFloat |
FLOAT | float | setFloat | getFloat |
DOUBLE | double | setDouble | getDouble |
VARBINARY | byte[ ] | setBytes | getBytes |
BINARY | byte[ ] | setBytes | getBytes |
DATE | java.sql.Date | setDate | getDate |
TIME | java.sql.Time | setTime | getTime |
TIMESTAMP | java.sql.Timestamp | setTimestamp | getTimestamp |
CLOB | java.sql.Clob | setClob | getClob |
BLOB | java.sql.Blob | setBlob | getBlob |
ARRAY | java.sql.Array | setARRAY | getARRAY |
REF | java.sql.Ref | SetRef | getRef |
STRUCT | java.sql.Struct | SetStruct | getStruct |
日付と時刻のデータ型
java.sql.DateクラスはSQL DATE型にマップされ、java.sql.Timeおよびjava.sql.TimestampクラスはそれぞれSQL TIMEおよびSQL TIMESTAMPデータ型にマップされます。
次の例は、日付および時刻クラスが標準のJava日付および時刻値をSQLデータ型の要件に一致するようにフォーマットする方法を示しています。
今、私たちは次のように上記の例をコンパイルしましょう-
NULL値の処理
SQLによるNULL値の使用とJavaによるNULL値の使用は、異なる概念です。 したがって、JavaでSQL NULL値を処理するには、使用できる3つの戦術があります-
- プリミティブデータ型を返すgetXXX()メソッドの使用は避けてください。
- プリミティブデータ型のラッパークラスを使用し、ResultSetオブジェクトのwasNull()メソッドを使用して、値を受け取ったラッパークラス変数が getXXX()メソッドによって返される値はnullに設定する必要があります。
- プリミティブデータ型とResultSetオブジェクトのwasNull()メソッドを使用して、getXXX()によって返された値を受け取ったプリミティブ変数がどうかをテストします。 メソッドは、NULLを表すために選択した許容値に設定する必要があります。
これは、NULL値を処理する1つの例です-