Драйвер JDBC преобразует тип данных Java в соответствующий тип JDBC перед отправкой в базу данных. Он использует отображение по умолчанию для большинства типов данных. Например, Java int преобразуется в SQL INTEGER. Для обеспечения согласованности между драйверами были созданы сопоставления по умолчанию.
В следующей таблице приведены типы данных JDBC по умолчанию, в которые преобразуется тип данных Java, когда вы вызываете метод setXXX () объекта PreparedStatement или CallableStatement или метод ResultSet.updateXXX ().
SQL | JDBC / Java | SetXXX | updateXXX |
---|---|---|---|
VARCHAR | java.lang.String | SetString | updateString |
CHAR | java.lang.String | SetString | updateString |
LONGVARCHAR | java.lang.String | SetString | updateString |
НЕМНОГО | логический | setBoolean | updateBoolean |
NUMERIC | java.math.BigDecimal | setBigDecimal | updateBigDecimal |
TINYINT | байт | setByte | updateByte |
SMALLINT | короткая | setShort | updateShort |
INTEGER | ИНТ | SetInt | updateInt |
BIGINT | долго | setLong | updateLong |
РЕАЛЬНЫЙ | поплавок | SetFloat | updateFloat |
FLOAT | поплавок | SetFloat | updateFloat |
DOUBLE | двойной | setDouble | updateDouble |
VARBINARY | байт [] | setBytes | updateBytes |
BINARY | байт [] | setBytes | updateBytes |
ДАТА | java.sql.Date | SETDATE | updateDate |
ВРЕМЯ | java.sql.Time | установленное время | Время обновления |
TIMESTAMP | java.sql.Timestamp | setTimestamp | updateTimestamp |
CLOB | java.sql.Clob | setClob | updateClob |
большой двоичный объект | 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 |
НЕМНОГО | логический | setBoolean | getBoolean |
NUMERIC | java.math.BigDecimal | setBigDecimal | getBigDecimal |
TINYINT | байт | setByte | GetByte |
SMALLINT | короткая | setShort | getShort |
INTEGER | ИНТ | SetInt | GetInt |
BIGINT | долго | setLong | getLong |
РЕАЛЬНЫЙ | поплавок | SetFloat | GetFloat |
FLOAT | поплавок | SetFloat | GetFloat |
DOUBLE | двойной | setDouble | getDouble |
VARBINARY | байт [] | setBytes | GetBytes |
BINARY | байт [] | setBytes | GetBytes |
ДАТА | java.sql.Date | SETDATE | GetDate |
ВРЕМЯ | java.sql.Time | установленное время | GetTime |
TIMESTAMP | java.sql.Timestamp | setTimestamp | getTimestamp |
CLOB | java.sql.Clob | setClob | getClob |
большой двоичный объект | 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 соответственно.
В следующем примере показано, как классы 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.
Вот один пример для обработки значения NULL —