Sobes.tech
Junior

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

sobes.tech AI

Отговор от AI

Основните типове данни в JDBC са дефинирани в класа java.sql.Types. Те представляват стандартните SQL типове. JVM типовете данни в Java са дефинирани в спецификацията на езика. JDBC предоставя съответствие (mapping) между тези два набора от типове.

Основните типове в java.sql.Types:

  • BOOLEAN
  • TINYINT
  • SMALLINT
  • INTEGER
  • BIGINT
  • REAL
  • FLOAT
  • DOUBLE
  • DECIMAL
  • NUMERIC
  • CHAR
  • VARCHAR
  • LONGVARCHAR
  • DATE
  • TIME
  • TIMESTAMP
  • BINARY
  • VARBINARY
  • LONGVARBINARY
  • BLOB
  • CLOB
  • NCHAR
  • NVARCHAR
  • LONGNVARCHAR
  • NCLOB
  • SQLXML

Карта между JDBC типовете и Java типовете при получаване на данни (от ResultSet):

JDBC Тип Java Тип (get) Забележки
BOOLEAN, BIT boolean
TINYINT byte
SMALLINT short
INTEGER int
BIGINT long
REAL float
FLOAT, DOUBLE double
DECIMAL, NUMERIC java.math.BigDecimal Препоръчително
CHAR, VARCHAR, LONGVARCHAR String
DATE java.sql.Date
TIME java.sql.Time
TIMESTAMP java.sql.Timestamp
BINARY, VARBINARY, LONGVARBINARY byte[]
BLOB java.sql.Blob
CLOB java.sql.Clob
NCHAR, NVARCHAR, LONGNVARCHAR String
NCLOB java.sql.NClob
SQLXML java.sql.SQLXML

Забележка: За числовите типове, освен примитивните, могат да се използват съответните класове-обвивки (Boolean, Byte, Short, Integer, Long, Float, Double) за обработка на стойности NULL.

Когато се задават данни (в PreparedStatement), обикновено се използва обратното картографиране, но има изключения и предпочитания. Например, за DECIMAL е по-добре да се използва BigDecimal.

Пример за използване:

// Метод за получаване на данни от ResultSet
public String getStringValue(ResultSet rs, String columnName) throws SQLException {
    // Получаване на низова стойност от колоната
    return rs.getString(columnName);
}

// Метод за задаване на параметър в PreparedStatement
public void setIntValue(PreparedStatement ps, int parameterIndex, int value) throws SQLException {
    // Задаване на цяло число
    ps.setInt(parameterIndex, value);
}