JDBC — Типы данных

Поділитись

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

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

SQLJDBC / JavaSetXXXupdateXXX
VARCHARjava.lang.StringSetStringupdateString
CHARjava.lang.StringSetStringupdateString
LONGVARCHARjava.lang.StringSetStringupdateString
НЕМНОГОлогическийsetBooleanupdateBoolean
NUMERICjava.math.BigDecimalsetBigDecimalupdateBigDecimal
TINYINTбайтsetByteupdateByte
SMALLINTкороткаяsetShortupdateShort
INTEGERИНТSetIntupdateInt
BIGINTдолгоsetLongupdateLong
РЕАЛЬНЫЙпоплавокSetFloatupdateFloat
FLOATпоплавокSetFloatupdateFloat
DOUBLEдвойнойsetDoubleupdateDouble
VARBINARYбайт []setBytesupdateBytes
BINARYбайт []setBytesupdateBytes
ДАТАjava.sql.DateSETDATEupdateDate
ВРЕМЯjava.sql.Timeустановленное времяВремя обновления
TIMESTAMPjava.sql.TimestampsetTimestampupdateTimestamp
CLOBjava.sql.ClobsetClobupdateClob
большой двоичный объектjava.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
НЕМНОГОлогическийsetBooleangetBoolean
NUMERICjava.math.BigDecimalsetBigDecimalgetBigDecimal
TINYINTбайтsetByteGetByte
SMALLINTкороткаяsetShortgetShort
INTEGERИНТSetIntGetInt
BIGINTдолгоsetLonggetLong
РЕАЛЬНЫЙпоплавокSetFloatGetFloat
FLOATпоплавокSetFloatGetFloat
DOUBLEдвойнойsetDoublegetDouble
VARBINARYбайт []setBytesGetBytes
BINARYбайт []setBytesGetBytes
ДАТАjava.sql.DateSETDATEGetDate
ВРЕМЯjava.sql.Timeустановленное времяGetTime
TIMESTAMPjava.sql.TimestampsetTimestampgetTimestamp
CLOBjava.sql.ClobsetClobgetClob
большой двоичный объектjava.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) {
      //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 и использование NULL в Java — разные понятия. Итак, для обработки значений SQL NULL в Java вы можете использовать три тактики:

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

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

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

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


Поділитись