Перечислите основные типы данных, используемые в JDBC, и объясните, как они связаны с типами данных Java.
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
| Тип данных SQL | Тип данных Java | Описание |
|---|---|---|
CHAR, VARCHAR, LONGVARCHAR |
String |
Символьные строки |
NUMERIC, DECIMAL |
BigDecimal |
Числа с фиксированной точкой |
BIT, BOOLEAN |
boolean |
Логические значения |
TINYINT |
byte |
Целое число от -128 до 127 |
SMALLINT |
short |
Целое число от -32768 до 32767 |
INTEGER |
int |
Целое число |
BIGINT |
long |
Большое целое число |
REAL |
float |
Число с плавающей точкой одинарной точности |
FLOAT, DOUBLE |
double |
Число с плавающей точкой двойной точности |
BINARY, VARBINARY, LONGVARBINARY |
byte[] |
Двоичные данные |
DATE |
java.sql.Date |
Дата (год, месяц, день) |
TIME |
java.sql.Time |
Время (час, минута, секунда) |
TIMESTAMP |
java.sql.Timestamp |
Дата и время с миллисекундами |
BLOB |
java.sql.Blob |
Двоичный объект большого размера |
CLOB |
java.sql.Clob |
Символьный объект большого размера |
ARRAY |
java.sql.Array |
Массив значений |
STRUCT |
java.sql.Struct |
Структурированный тип |
REF |
java.sql.Ref |
Ссылка на структурированный тип |
DATALINK |
java.net.URL |
Ссылка на внешний ресурс |
JAVA_OBJECT |
Object |
Сериализованный объект Java (зависит от реализации) |
ROWID |
java.sql.RowId |
Идентификатор строки (зависит от СУБД) |
NCHAR, NVARCHAR, LONGNVARCHAR |
String |
Национализируемые символьные строки |
NCLOB |
java.sql.NClob |
Национализируемый символьный объект большого размера |
SQLXML |
java.sql.SQLXML |
XML-данные |
JDBC (Java Database Connectivity) специфицирует стандартные SQL-типы данных в классе java.sql.Types. Эти типы данных представляют собой числовые константы. JDBC-драйверы маппят эти SQL-типы данных на подходящие типы данных Java при чтении данных из базы (например, с использованием методов getXXX() класса ResultSet) и при записи данных в базу (например, с использованием методов setXXX() класса PreparedStatement).
Связь определяется тем, как JDBC-драйвер конкретной базы данных реализует отображение между внутренними типами данных базы и стандартными java.sql.Types, а затем на типы данных Java. Это отображение документировано в спецификации JDBC и может незначительно отличаться между драйверами, хотя основные маппинги, приведенные в таблице, являются стандартными.
Пример получения данных из ResultSet:
// Предполагается, что rs - это ResultSet
String name = rs.getString("column_name_varchar");
int id = rs.getInt("column_name_integer");
BigDecimal value = rs.getBigDecimal("column_name_numeric");
Date date = rs.getDate("column_name_date");
Пример установки параметров в PreparedStatement:
// Предполагается, что pstmt - это PreparedStatement
String name = "Test Name";
int id = 123;
BigDecimal value = new BigDecimal("100.50");
Date date = new Date(System.currentTimeMillis());
pstmt.setString(1, name); // 1 - номер параметра (начиная с 1)
pstmt.setInt(2, id);
pstmt.setBigDecimal(3, value);
pstmt.setDate(4, date);
JDBC старается обеспечить максимальную совместимость, но для специфических или вендорно-зависимых типов данных могут потребоваться особые подходы или использование методов getObject() / setObject() с последующим приведением типов или проверкой с помощью instanceof.