Драйвер 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.