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;
}