Jinis data

Ayo ndeleng tabel:

"C:\Program Files\Java\jdk-17.0.3.1\bin\java.exe...
id java.lang.Integer INT 4
jeneng java.lang.string VARCHAR 12
tingkat java.lang.Integer INT 4
digawe_tanggal java.sql.date TANGGAL 91
Proses rampung kanthi kode metu 0

Ing kolom katelu kita ndeleng jinis: INT , VARCHAR , DATE . Iki minangka jinis server SQL. Server tegese menehi data karo jinis sing dheweke ngerti. Kepiye jinis iki diowahi dadi jinis Jawa?

Iki minangka salah sawijining perkara sing wis standar karo JDBC. Pencipta JDBC diwiwiti kanthi ndandani dhaptar jinis SQL. Ana kelas khusus kanthi konstanta:

class java.sql.Types {
   public static final int CHAR         =   1;
   public static final int NUMERIC    	=   2;
   public static final int DECIMAL     	=   3;
   public static final int INTEGER      =   4;
   public static final int FLOAT        =   6;
   public static final int REAL         =   7;}

Nomer kasebut dudu nomer seri ing kelas, nanging jinis ID ing dhaptar jinis SQL ing spesifikasi SQL. Iki minangka nomer sing sampeyan deleng ing conto ing wiwitan kuliah.

Uga ing kelas ResultSet ana cara sing bisa ngowahi siji jinis data menyang liyane. Ora kabeh jinis bisa diowahi kanggo saben liyane, nanging logika cukup cetha. Mangkene spreadsheet sing apik kanggo sampeyan:

Metode Tipe data SQL
int getInt() NUMERIC, INTEGER, DECIMAL
float getFloat() NUMERIC, INTEGER, DECIMAL, FLOAT, REAL
dobel njalukDoubel() NUMERIC, INTEGER, DECIMAL, FLOAT, REAL
Tanggal getDate() TANGGAL, WAKTU, TIMESTAMP
Wektu entuk Wektu () TANGGAL, WAKTU, TIMESTAMP
Timestamp njalukTimestamp() TANGGAL, WAKTU, TIMESTAMP
String getString() CHAR, VAR

Ing antarane kabeh jinis SQL, sawetara klompok bisa dibedakake kanthi jelas:

  • angka
  • wektu
  • baris
  • obyek byte

Ngomong-ngomong, sampeyan ngerti metode getInt() ?

JDBC lan NULL

Apa sampeyan ngerti apa sing salah karo metode getInt () saka kelas ResultSet ? Ayo dideleng maneh tanda tangane:

int getInt(column)

Cara iki ngasilake int , dudu Integer. Amarga ing wektu JDBC jinis Integer digawe, iku durung ana. Oke, ayo ngomong. Banjur aku duwe pitakon:

Aku duwe tabel ing database sing duwe kolom INT NULL sing bisa INT nanging bisa uga NULL. Kepiye carane bisa entuk nilai null saka kolom iki?

Aja kuwatir, kabeh wis dipikirake kanggo sampeyan.

Solusi siji . Yen jinis SQL ing Jawa diwakili dening jinis referensi kayata Tanggal utawa String, banjur ora ana masalah . Variabel saka jinis iki bisa njupuk nilai null.

Solusi loro . Jinis primitif ora bisa null, supaya cara kaya getInt() mung bakal ngasilake nilai standar . Kanggo int iku 0, kanggo float = 0.0f, kanggo pindho = 0.0d lan kaya.

Lan kepiye carane ngerti apa sing ana ing kolom: 0 utawa NULL? Lan partai duwe jawaban kanggo pitakonan iki.

Solusi telu . Kelas ResultSet nduweni metode wasNull () khusus sing ngasilake bener yen metode kasebut mung ngasilake nilai sing beda tinimbang NULL .

Kabeh dianggo persis kaya aku wrote kene. Tuladha:

ResultSet results = staatement.executeQuery("SELECT * FROM user");
    int level = results.getInt("level");

if (results.wasNull()) {
    System.out.println("Level is null");
} else {
   System.out.println("Level is " + level);
    }

Yen mesthine bali null nalika nelpon metode getInt () , banjur metode wasNull () bakal bali bener, yen metode wasNull () bakal bali palsu.

Iki dianggo ora mung kanggo jinis primitif:

ResultSet results = staatement.executeQuery("SELECT * FROM user");
    String name = results.getString("name");

 	if (results.wasNull()) {
 	    System.out.println("Name is null");
 	} else {
 	   System.out.println("User name is " + name);
    }

Iki mesthi kruk. Nanging ora ana masalah karo NullPointerException . Waca positif ing kabeh :)

Apa sing salah karo jinis data ing JDBC?

Ayo diterusake karo tes. Deleng kanthi cetha ing metode getDate(kolom) ? Ana apa karo dheweke? Cara iki nduweni jinis asil ing ngisor iki:

java.sql.Date

Bisa nyimpen null, kang cukup apik. Nanging isih ana sing salah karo dheweke. Petunjuk! Mangkene jinis Tanggal sing bener:

java.util.Date

Padha duwe paket beda! Iki umume macem-macem jinis data. Lan iki alasane ...

Basis data wiwit taun 70-an abad kaping 20 ndhukung 3 jinis data kanggo nyimpen wektu:

  • DATE - nyimpen tanggal: taun, sasi, dina.
  • TIME - nyimpen wektu: jam, menit, detik.
  • TIMESTAMP - nyimpen titik tartamtu ing wektu: tanggal, wektu lan milliseconds.

Basa Jawa sajrone 10 taun pisanan anane mung nduweni siji jinis data, yaiku java.util.Date , sing nyimpen titik wektu ing format UNIX TIME: jumlah milidetik wiwit wiwitan taun 1970.

Mula, pangripta standar JDBC nambahake telung jinis data liyane menyang Jawa - khusus kanggo JDBC:

  • java.sql.date
  • java.sql.Wektu
  • java.sqlTimestamp

Dadi metode antarmuka ResultSet ngemot jinis data tetep:

JENIS SQL Tipe Jawa Metode
TANGGAL java.sql.date java.sql.date getDate()
WAKTU java.sql.Wektu java.sql.Time getTime()
TIMESTAMP java.sql.timestamp java.sql.Timestamp getTimestamp()

Lan iki jinis sing sampeyan deleng ing kene:

"C:\Program Files\Java\jdk-17.0.3.1\bin\java.exe...
id java.lang.Integer INT 4
jeneng java.lang.string VARCHAR 12
tingkat java.lang.Integer INT 4
digawe_tanggal java.sql.date TANGGAL 91
Proses rampung kanthi kode metu 0

Coba tebak apa sing ilang ing kene? Jinis data sing wis katon ing Java DateTime API:

  • LocalDate
  • Wektu Lokal
  • LocalDateTime