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

Типы данных JDBC

Драйвер JDBC предварительно преобразует тип данных Java в соответствующий тип данных JDBC перед отправкой его в базу данных. Он используетdefault mapping для большинства типов данных. Например, Java int преобразуется в SQL INTEGER. Созданdefault mapping для обеспечения一致性 между драйверами.

При вызове методов setXXX() объекта PreparedStatement или CallableStatement или методов updateXXX() объекта ResultSet, в таблице ниже приведен список типов данных Java по умолчанию, преобразуемых в типы данных JDBC.

SQLJDBC / JavasetXXXОбновление XXX
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("Java дата: " + 
             javaDate.toString());
      //Получение и отображение SQL DATE
      java.sql.Date sqlDate = new java.sql.Date(javaTime);
      System.out.println("Java SQL DATE: " + 
             sqlDate.toString());
      //Получение и отображение SQL TIME
      java.sql.Time sqlTime = new java.sql.Time(javaTime);
      System.out.println("Java SQL TIME: " + 
             sqlTime.toString());
      //Получение и отображение SQL TIMESTAMP
      java.sql.Timestamp sqlTimestamp =
      new java.sql.Timestamp(javaTime);
      System.out.println("Java SQL TIMESTAMP: " + 
             sqlTimestamp.toString());
     //Конец main
//Конец SqlDateTime

Теперь давайте скомпилируем приведенный выше пример, как показано ниже:

C:\>javac SqlDateTime.java
C:\>

во время выполненияJDBCExampleона вызовет следующий результат-

C:\>java SqlDateTime
Java дата: Вт 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 значений

Использование NULL в SQL и использование null в Java - это два разных концепции. Поэтому для обработки NULL значений SQL в Java можно использовать три стратегии-

  • Избегайте использования методов getXXX() для возвращения исходных данных типа.

  • Используйте обертки для исходных данных типа и метод wasNull() объекта ResultSet для проверки того, должен ли переменный обертки, возвращаемый методом getXXX(), быть установлен в null.

  • Используйте исходные данные типа и метод wasNull() объекта ResultSet для проверки того, должен ли原始 переменный, возвращаемый методом 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;
}