English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
JDBC ドライバーは、Java データ型をデータベースに送信する前に、適切な JDBC タイプに変換します。多くのデータ型にはデフォルトのマッピングを使用します。例えば、Java int を SQL INTEGER に変換します。デフォルトのマッピングは、ドライバー間の一貫性を提供するために作成されました。
PreparedStatement または CallableStatement オブジェクトの setXXX() メソッドまたは ResultSet.updateXXX() メソッドを呼び出したとき、以下のテーブルは Java データ型がデフォルトの JDBC データ型に変換されることをまとめています。
のSQL | JDBC / Java | setXXX | XXXの更新 |
---|---|---|---|
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データタイプにマッピングされます。
以下の例では、DateとTimeクラスが標準のJava日期と時間値をどのようにフォーマットしてSQLデータタイプ要求に一致させるかを示します。
import java.sql.Date; import java.sql.Time; import java.sql.Timestamp; import java.util.*; public class SqlDateTime { public static void main(String[] args) { //標準の日期と時間を取得 java.util.Date javaDate = new java.util.Date(); long javaTime = javaDate.getTime(); System.out.println("The Java Date is:"); + javaDate.toString()); //SQL DATEを取得し表示 java.sql.Date sqlDate = new java.sql.Date(javaTime); System.out.println("The SQL DATE is: "); + sqlDate.toString()); //SQL TIMEを取得し表示 java.sql.Time sqlTime = new java.sql.Time(javaTime); System.out.println("The SQL TIME is: "); + sqlTime.toString()); //SQL TIMESTAMPを取得し表示 java.sql.Timestamp sqlTimestamp = new java.sql.Timestamp(javaTime); System.out.println("The SQL TIMESTAMP is: "); + sqlTimestamp.toString()); }//mainを終了 }//SqlDateTimeを終了
次に、上記の例を以下のようにコンパイルしましょう:
C:\>javac SqlDateTime.java C:\>
実行時JDBCExample以下結果が生成されます。-
C:\>java SqlDateTime Java Dateは:Tue Aug 18 13:46:02 GMT+04:00 2009 SQL DATEは: 2009-08-18 SQL TIMEは: 13:46:02 SQL TIMESTAMPは: 2009-08-18 13:46:02.828 C:\>
SQLのNULL値の使用とJavaのnullの使用は異なる概念です。したがって、JavaでSQL NULL値を処理するには、3つの戦略を使用できます-
getXXX( )メソッドがオリジナルデータ型を返す方法の使用を避けます。
オリジナルデータ型には包装クラスを使用し、ResultSetオブジェクトのwasNull( )メソッドを使用して、getXXX( )メソッドから返される値の包装クラス変数がnullに設定されるべきかどうかをテストします。
オリジナルデータ型とResultSetオブジェクトのwasNull( )メソッドを使用して、getXXX( )メソッドから返される値のオリジナル変数が、選択したNULLを表す許容可能な値に設定されるべきかどうかをテストします。
これはNULL値を処理する例です-
Statement stmt = conn.createStatement( ); String sql = "SELECT id, first, last, age FROM Employees"; ResultSet rs = stmt.executeQuery(sql); int id = rs.getInt(1); if( rs.wasNull( ) ) { id = 0; }