Jdbc-data-types

提供:Dev Guides
移動先:案内検索

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データ型の要件に一致するようにフォーマットする方法を示しています。

import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.*;

public class SqlDateTime {
   public static void main(String[] args) {
     //Get standard date and time
      java.util.Date javaDate = new java.util.Date();
      long javaTime = javaDate.getTime();
      System.out.println("The Java Date is:" +
             javaDate.toString());

     //Get and display SQL DATE
      java.sql.Date sqlDate = new java.sql.Date(javaTime);
      System.out.println("The SQL DATE is: " +
             sqlDate.toString());

     //Get and display SQL TIME
      java.sql.Time sqlTime = new java.sql.Time(javaTime);
      System.out.println("The SQL TIME is: " +
             sqlTime.toString());
     //Get and display SQL TIMESTAMP
      java.sql.Timestamp sqlTimestamp =
      new java.sql.Timestamp(javaTime);
      System.out.println("The SQL TIMESTAMP is: " +
             sqlTimestamp.toString());
     }//end main
}//end SqlDateTime

今、私たちは次のように上記の例をコンパイルしましょう-

C:\>javac SqlDateTime.java
C:\>
*JDBCExample* を実行すると、次の結果が生成されます-
C:\>java SqlDateTime
The Java Date is:Tue Aug 18 13:46:02 GMT+04:00 2009
The SQL DATE is: 2009-08-18
The SQL TIME is: 13:46:02
The SQL TIMESTAMP is: 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値を処理する1つの例です-

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