JDBC - ประเภทข้อมูล
ไดรเวอร์ JDBC แปลงชนิดข้อมูล Java เป็นชนิด JDBC ที่เหมาะสมก่อนที่จะส่งไปยังฐานข้อมูล ใช้การแมปเริ่มต้นสำหรับชนิดข้อมูลส่วนใหญ่ ตัวอย่างเช่น Java int จะถูกแปลงเป็น SQL INTEGER การแมปเริ่มต้นถูกสร้างขึ้นเพื่อให้มีความสอดคล้องกันระหว่างไดรเวอร์
ตารางต่อไปนี้สรุปชนิดข้อมูล JDBC ดีฟอลต์ที่ชนิดข้อมูล Java ถูกแปลงเมื่อคุณเรียกเมธอด setXXX () ของอ็อบเจ็กต์ PreparedStatement หรือ CallableStatement หรือเมธอด ResultSet.updateXXX ()
SQL | JDBC / Java | setXXX | updateXXX |
---|---|---|---|
VARCHAR | java.lang.String | setString | updateString |
CHAR | java.lang.String | setString | updateString |
LONGVARCHAR | java.lang.String | setString | updateString |
นิดหน่อย | บูลีน | setBoolean | updateBoolean |
NUMERIC | java.math.BigDecimal | setBigDecimal | updateBigDecimal |
TINYINT | ไบต์ | setByte | updateByte |
SMALLINT | สั้น | setShort | updateShort |
จำนวนเต็ม | int | setInt | updateInt |
ใหญ่ | ยาว | setLong | updateLong |
จริง | ลอย | setFloat | updateFloat |
ลอย | ลอย | setFloat | updateFloat |
สองเท่า | สองเท่า | setDouble | updateDouble |
ตัวแปร | ไบต์ [] | setBytes | updateBytes |
ไบนารี่ | ไบต์ [] | setBytes | updateBytes |
วันที่ | java.sql.Date | setDate | updateDate |
เวลา | java.sql.Time | ตั้งเวลา | updateTime |
TIMESTAMP | java.sql.Timestamp | setTimestamp | updateTimestamp |
CLOB | java.sql.Clob | setClob | updateClob |
หยด | java.sql.Blob | setBlob | updateBlob |
ARRAY | java.sql.Array | setARRAY | updateARRAY |
REF | java.sql.Ref | SetRef | updateRef |
โครงสร้าง | java.sql.Struct | SetStruct | updateStruct |
JDBC 3.0 ได้ปรับปรุงการสนับสนุนสำหรับชนิดข้อมูล BLOB, CLOB, ARRAY และ REF ขณะนี้อ็อบเจ็กต์ ResultSet มีเมธอด updateBLOB (), updateCLOB (), updateArray () และ updateRef () ที่ช่วยให้คุณสามารถจัดการข้อมูลที่เกี่ยวข้องบนเซิร์ฟเวอร์ได้โดยตรง
เมธอด setXXX () และ updateXXX () ช่วยให้คุณสามารถแปลงชนิด Java ที่ระบุเป็นชนิดข้อมูล JDBC เฉพาะ เมธอด setObject () และ updateObject () ช่วยให้คุณสามารถแมป Java เกือบทุกประเภทกับชนิดข้อมูล JDBC
อ็อบเจ็กต์ ResultSet จัดเตรียมเมธอด getXXX () ที่สอดคล้องกันสำหรับข้อมูลแต่ละชนิดเพื่อดึงค่าคอลัมน์ แต่ละวิธีสามารถใช้ได้กับชื่อคอลัมน์หรือตามตำแหน่งลำดับ
SQL | JDBC / Java | setXXX | getXXX |
---|---|---|---|
VARCHAR | java.lang.String | setString | getString |
CHAR | java.lang.String | setString | getString |
LONGVARCHAR | java.lang.String | setString | getString |
นิดหน่อย | บูลีน | setBoolean | getBoolean |
NUMERIC | java.math.BigDecimal | setBigDecimal | getBigDecimal |
TINYINT | ไบต์ | setByte | getByte |
SMALLINT | สั้น | setShort | getShort |
จำนวนเต็ม | int | setInt | getInt |
ใหญ่ | ยาว | setLong | getLong |
จริง | ลอย | setFloat | getFloat |
ลอย | ลอย | setFloat | getFloat |
สองเท่า | สองเท่า | setDouble | getDouble |
ตัวแปร | ไบต์ [] | setBytes | getBytes |
ไบนารี่ | ไบต์ [] | setBytes | getBytes |
วันที่ | java.sql.Date | setDate | getDate |
เวลา | java.sql.Time | ตั้งเวลา | getTime |
TIMESTAMP | java.sql.Timestamp | setTimestamp | getTimestamp |
CLOB | java.sql.Clob | setClob | getClob |
หยด | java.sql.Blob | setBlob | getBlob |
ARRAY | java.sql.Array | setARRAY | getARRAY |
REF | java.sql.Ref | SetRef | getRef |
โครงสร้าง | java.sql.Struct | SetStruct | getStruct |
ประเภทข้อมูลวันที่และเวลา
คลาส java.sql.Date แมปกับชนิด SQL DATE และคลาส java.sql.Time และ java.sql.Timestamp จะแม็พกับชนิดข้อมูล SQL TIME และ SQL TIMESTAMP ตามลำดับ
ตัวอย่างต่อไปนี้แสดงวิธีที่คลาสวันที่และเวลาจัดรูปแบบค่าวันที่และเวลามาตรฐานของ Java เพื่อให้ตรงกับข้อกำหนดชนิดข้อมูล SQL
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.*;
public class SqlDateTime {
public static void main(String[] args) {
//Get standard date and time
java.util.Date javaDate = new java.util.Date();
long javaTime = javaDate.getTime();
System.out.println("The Java Date is:" +
javaDate.toString());
//Get and display SQL DATE
java.sql.Date sqlDate = new java.sql.Date(javaTime);
System.out.println("The SQL DATE is: " +
sqlDate.toString());
//Get and display SQL TIME
java.sql.Time sqlTime = new java.sql.Time(javaTime);
System.out.println("The SQL TIME is: " +
sqlTime.toString());
//Get and display SQL TIMESTAMP
java.sql.Timestamp sqlTimestamp =
new java.sql.Timestamp(javaTime);
System.out.println("The SQL TIMESTAMP is: " +
sqlTimestamp.toString());
}//end main
}//end SqlDateTime
ตอนนี้ให้เรารวบรวมตัวอย่างข้างต้นดังนี้ -
C:\>javac SqlDateTime.java
C:\>
เมื่อคุณเรียกใช้ JDBCExampleมันให้ผลลัพธ์ดังต่อไปนี้ -
C:\>java SqlDateTime
The Java Date is:Tue Aug 18 13:46:02 GMT+04:00 2009
The SQL DATE is: 2009-08-18
The SQL TIME is: 13:46:02
The SQL TIMESTAMP is: 2009-08-18 13:46:02.828
C:\>
การจัดการค่า NULL
การใช้ค่า NULL ของ SQL และการใช้ null ของ Java เป็นแนวคิดที่แตกต่างกัน ดังนั้นเพื่อจัดการกับค่า SQL NULL ใน Java มีสามกลยุทธ์ที่คุณสามารถใช้ได้ -
หลีกเลี่ยงการใช้เมธอด getXXX () ที่ส่งคืนชนิดข้อมูลดั้งเดิม
ใช้คลาส wrapper สำหรับชนิดข้อมูลดั้งเดิมและใช้เมธอด wasNull () ของอ็อบเจ็กต์ ResultSet เพื่อทดสอบว่าตัวแปรคลาส wrapper ที่ได้รับค่าที่ส่งคืนโดยเมธอด getXXX () ควรตั้งค่าเป็น null หรือไม่
ใช้ชนิดข้อมูลดั้งเดิมและวิธี wasNull () ของออบเจ็กต์ ResultSet เพื่อทดสอบว่าตัวแปรดั้งเดิมที่ได้รับค่าที่ส่งคืนโดยเมธอด getXXX () ควรตั้งค่าเป็นค่าที่ยอมรับได้ซึ่งคุณได้เลือกไว้เพื่อแทนค่า NULL
นี่คือตัวอย่างหนึ่งในการจัดการค่า NULL -
Statement stmt = conn.createStatement( );
String sql = "SELECT id, first, last, age FROM Employees";
ResultSet rs = stmt.executeQuery(sql);
int id = rs.getInt(1);
if( rs.wasNull( ) ) {
id = 0;
}