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