Sobes.tech
Junior

Loetlege JDBC-s kasutatavad peamised andmetüübid ja selgitage, kuidas need on seotud Java andmetüüpidega.

sobes.tech AI

Vastus AI-lt

JDBC peamised andmetüübid on määratletud klassis java.sql.Types. Need esindavad standardseid SQL-tüüpe. JVM-tüübid Java keeles on määratletud keele spetsifikatsioonis. JDBC pakub nende kahe tüüpi kogumi vahel (mapping) seost.

java.sql.Types põhityüppeid:

  • 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

Andmete saamise ajal (ResultSet) toimub JDBC tüüpide ja Java tüüpide vahel järgmine mappimine:

JDBC tüüp Java tüüp (get) Märkused
BOOLEAN, BIT boolean
TINYINT byte
SMALLINT short
INTEGER int
BIGINT long
REAL float
FLOAT, DOUBLE double
DECIMAL, NUMERIC java.math.BigDecimal Soovitatav
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

Märkus: Numbriliste tüüpide puhul, lisaks primitiivsetele tüüpidele, saab kasutada vastavaid objekti klasse (Boolean, Byte, Short, Integer, Long, Float, Double) NULL väärtuste töötlemiseks.

Andmete seadistamisel (PreparedStatement) kasutatakse tavaliselt vastupidist mappimist, kuid on erandeid ja eelistusi. Näiteks DECIMAL jaoks on parem kasutada BigDecimal:

Näide kasutusest:

// Meetod andmete saamiseks ResultSetist
public String getStringValue(ResultSet rs, String columnName) throws SQLException {
    // Saame string väärtuse veerult
    return rs.getString(columnName);
}

// Meetod parameetri seadistamiseks PreparedStatementis
public void setIntValue(PreparedStatement ps, int parameterIndex, int value) throws SQLException {
    // Seadistame täisarvu väärtuse päringuparameetrile
    ps.setInt(parameterIndex, value);
}