Избройте основните типове данни, използвани в 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.