Sobes.tech
Middle

Избройте основните типове данни, използвани в JDBC, и обяснете как те са свързани с типовете данни на Java.

sobes.tech AI

Отговор от 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 драйверите ги картографират към подходящи Java типове при четене на данни от базата (например с getXXX() методите на ResultSet) и при записване в базата (например с setXXX() методите на PreparedStatement).

Картографирането зависи от това как конкретният драйвер за базата данни реализира съответствието между вътрешните типове данни на базата и 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.