JDBC - Loại dữ liệu

Trình điều khiển JDBC chuyển đổi kiểu dữ liệu Java sang kiểu JDBC thích hợp, trước khi gửi đến cơ sở dữ liệu. Nó sử dụng một ánh xạ mặc định cho hầu hết các kiểu dữ liệu. Ví dụ, một int Java được chuyển đổi thành một INTEGER SQL. Các ánh xạ mặc định đã được tạo để cung cấp tính nhất quán giữa các trình điều khiển.

Bảng sau đây tóm tắt kiểu dữ liệu JDBC mặc định mà kiểu dữ liệu Java được chuyển đổi thành, khi bạn gọi phương thức setXXX () của đối tượng PreparedStatement hoặc CallableStatement hoặc phương thức 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
BIT boolean setBoolean updateBoolean
SỐ java.math.BigDecimal setBigDecimal updateBigDecimal
TINYINT byte setByte updateByte
SMALLINT ngắn setShort updateShort
INTEGER int setInt updateInt
BIGINT Dài setLong updateLong
THỰC TẾ Phao nổi setFloat updateFloat
PHAO NỔI Phao nổi setFloat updateFloat
GẤP ĐÔI gấp đôi setDouble updateDouble
VARBINARY byte [] setBytes updateBytes
BINARY byte [] setBytes updateBytes
NGÀY java.sql.Date đặt ngày cập nhật ngày tháng
THỜI GIAN java.sql.Time cài đặt thời gian cập nhật thời gian
TIMESTAMP java.sql.Timestamp setTimestamp updateTimestamp
CLOB java.sql.Clob setClob updateClob
BÃI java.sql.Blob setBlob updateBlob
MẢNG java.sql.Array setARRAY cập nhật
REF java.sql.Ref SetRef updateRef
CẤU TRÚC java.sql.Struct SetStruct updateStruct

JDBC 3.0 đã hỗ trợ nâng cao cho các kiểu dữ liệu BLOB, CLOB, ARRAY và REF. Đối tượng ResultSet hiện có các phương thức updateBLOB (), updateCLOB (), updateArray () và updateRef () cho phép bạn thao tác trực tiếp dữ liệu tương ứng trên máy chủ.

Phương thức setXXX () và updateXXX () cho phép bạn chuyển đổi các kiểu Java cụ thể thành các kiểu dữ liệu JDBC cụ thể. Các phương thức setObject () và updateObject () cho phép bạn ánh xạ hầu hết mọi kiểu Java sang kiểu dữ liệu JDBC.

Đối tượng ResultSet cung cấp phương thức getXXX () tương ứng cho mỗi kiểu dữ liệu để truy xuất giá trị cột. Mỗi phương thức có thể được sử dụng với tên cột hoặc theo vị trí thứ tự của nó.

SQL JDBC / Java setXXX getXXX
VARCHAR java.lang.String setString getString
CHAR java.lang.String setString getString
LONGVARCHAR java.lang.String setString getString
BIT boolean setBoolean getBoolean
SỐ java.math.BigDecimal setBigDecimal getBigDecimal
TINYINT byte setByte getByte
SMALLINT ngắn setShort getShort
INTEGER int setInt getInt
BIGINT Dài setLong getLong
THỰC TẾ Phao nổi setFloat getFloat
PHAO NỔI Phao nổi setFloat getFloat
GẤP ĐÔI gấp đôi setDouble getDouble
VARBINARY byte [] setBytes getBytes
BINARY byte [] setBytes getBytes
NGÀY java.sql.Date đặt ngày hẹn gặp
THỜI GIAN java.sql.Time cài đặt thời gian dành thời gian
TIMESTAMP java.sql.Timestamp setTimestamp getTimestamp
CLOB java.sql.Clob setClob getClob
BÃI java.sql.Blob setBlob getBlob
MẢNG java.sql.Array setARRAY getARRAY
REF java.sql.Ref SetRef getRef
CẤU TRÚC java.sql.Struct SetStruct getStruct

Loại dữ liệu ngày và giờ

Lớp java.sql.Date ánh xạ tới kiểu SQL DATE, và các lớp java.sql.Time và java.sql.Timestamp ánh xạ tới kiểu dữ liệu SQL TIME và SQL TIMESTAMP tương ứng.

Ví dụ sau đây cho thấy cách các lớp Ngày và Giờ định dạng các giá trị ngày và giờ chuẩn của Java để phù hợp với các yêu cầu về kiểu dữ liệu 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

Bây giờ chúng ta hãy biên dịch ví dụ trên như sau:

C:\>javac SqlDateTime.java
C:\>

Khi bạn chạy JDBCExample, nó tạo ra kết quả sau:

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:\>

Xử lý giá trị NULL

Việc sử dụng giá trị NULL của SQL và việc sử dụng giá trị null của Java là các khái niệm khác nhau. Vì vậy, để xử lý các giá trị SQL NULL trong Java, có ba chiến thuật bạn có thể sử dụng:

  • Tránh sử dụng các phương thức getXXX () trả về kiểu dữ liệu nguyên thủy.

  • Sử dụng các lớp trình bao bọc cho các kiểu dữ liệu nguyên thủy và sử dụng phương thức wasNull () của đối tượng ResultSet để kiểm tra xem biến lớp trình bao bọc nhận được giá trị do phương thức getXXX () trả về có được đặt thành null hay không.

  • Sử dụng các kiểu dữ liệu nguyên thủy và phương thức wasNull () của đối tượng ResultSet để kiểm tra xem biến nguyên thủy đã nhận giá trị do phương thức getXXX () trả về có được đặt thành giá trị chấp nhận được mà bạn đã chọn để đại diện cho NULL hay không.

Đây là một ví dụ để xử lý giá trị 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;
}