English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JDBC データ型

JDBC ドライバーは、Java データ型をデータベースに送信する前に、適切な JDBC タイプに変換します。多くのデータ型にはデフォルトのマッピングを使用します。例えば、Java int を SQL INTEGER に変換します。デフォルトのマッピングは、ドライバー間の一貫性を提供するために作成されました。

PreparedStatement または CallableStatement オブジェクトの setXXX() メソッドまたは ResultSet.updateXXX() メソッドを呼び出したとき、以下のテーブルは Java データ型がデフォルトの JDBC データ型に変換されることをまとめています。

のSQLJDBC / JavasetXXXXXXの更新
VARCHARjava.lang.StringsetStringupdateString
CHARjava.lang.StringsetStringupdateString
LONGVARCHARjava.lang.StringsetStringupdateString
BITbooleansetBooleanupdateBoolean
NUMERICjava.math.BigDecimalsetBigDecimalupdateBigDecimal
TINYINTbytesetByteupdateByte
SMALLINTshortsetShortupdateShort
INTEGERintsetIntupdateInt
BIGINTlongsetLongupdateLong
REALfloatsetFloatupdateFloat
FLOATfloatsetFloatupdateFloat
DOUBLEdoublesetDoubleupdateDouble
VARBINARYbyte[ ]setBytesupdateBytes
BINARYbyte[ ]setBytesupdateBytes
DATEjava.sql.DatesetDateupdateDate
TIMEjava.sql.TimesetTimeupdateTime
TIMESTAMPjava.sql.TimestampsetTimestampupdateTimestamp
CLOBjava.sql.ClobsetClobupdateClob
BLOBjava.sql.BlobsetBlobupdateBlob
ARRAYjava.sql.ArraysetARRAYupdateARRAY
REFjava.sql.RefSetRefupdateRef
STRUCTjava.sql.StructSetStructupdateStruct

JDBC 3.0 拡張了对 BLOB、CLOB、ARRAY および REF データ型のサポート。ResultSet オブジェクトには、updateBLOB()、updateCLOB()、updateArray()、および updateRef() メソッドが追加されました。これにより、サーバー上で直接操作するための対応するデータにアクセスできます。

setXXX()およびupdateXXX()メソッドを使用して、特定のJavaタイプを特定のJDBCデータ型に変換することができます。setObject()およびupdateObject()メソッドを使用して、ほぼすべてのJavaタイプをJDBCデータ型にマッピングすることができます。

ResultSet オブジェクトは、各データ型に対して、列値を検索するために対応する getXXX() メソッドを提供します。各メソッドは、列名またはそのシーケンス位置と一緒に使用できます。

のSQLJDBC / JavasetXXXgetXXX
VARCHARjava.lang.StringsetStringgetString
CHARjava.lang.StringsetStringgetString
LONGVARCHARjava.lang.StringsetStringgetString
BITbooleansetBooleangetBoolean
NUMERICjava.math.BigDecimalsetBigDecimalgetBigDecimal
TINYINTbytesetBytegetByte
SMALLINTshortsetShortgetShort
INTEGERintsetIntgetInt
BIGINTlongsetLonggetLong
REALfloatsetFloatgetFloat
FLOATfloatsetFloatgetFloat
DOUBLEdoublesetDoublegetDouble
VARBINARYbyte[ ]setBytesgetBytes
BINARYbyte[ ]setBytesgetBytes
DATEjava.sql.DatesetDategetDate
TIMEjava.sql.TimesetTimegetTime
TIMESTAMPjava.sql.TimestampsetTimestampgetTimestamp
CLOBjava.sql.ClobsetClobgetClob
BLOBjava.sql.BlobsetBlobgetBlob
ARRAYjava.sql.ArraysetARRAYgetARRAY
REFjava.sql.RefSetRefgetRef
STRUCTjava.sql.StructSetStructgetStruct

日付と時間データ型

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:\>

NULL値の処理

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;
}