III- Cơ chế truyền nhận trong Java
c. Ðối Tượng ResultSet
Ðối tượng ResultSet là một đối tượng rất quan trọng trong JDBC. Nó là một sự trừu tượng hóa rất cần thiết của một bảng được tổ chức về chiều rộng và có chiều dài không được biết trước. Hầu như tất cả các phương thức, kết quả của các truy vấn đều trả về dữ liệu như một ResultSet. Nó liên quan đến số tên cột mà ta có thể truy vấn bởi tên. Nó còn gồm cả tên của các hàng mà ta có thể di chuyển suốt từ trên xuống dưới của dãy trong một lần.
Trước khi dùng ResultSet, ta cần phải biết xem có bao nhiêu cột liên quan đến. Thông tin này được cất trong đối tượng ResultSetMetaData.
ResultSet results;
ResultSetMetaData rsmd; rsmd=results.getMetaData(); numcols=rsmd.getColumnCount();
Khi ta thu được một ResultSet, nó chỉ tới hàng đầu tiên. Ta sử dụng phương thức next() để thu thêm các hàng còn lại, và phương thức trả về False khi không còn hàng nào nữa. Từ khi đem dữ liệu từ một cơ sở dữ liệu, có thể, nó sẽ phát ra những biệt lệ. Ta phải luôn đặt hàm lấy kết quả trong một khối try
try {
rsmd= results.getMetaData(); //lấy dữ liệu từ kho MetaData ResultSetMetaData rsmd=results.getMetaData();
int numCols=rsmd.getColumnCount();//tạo biến đếm số cột boolean more=results.next(); //tạo biến cho biết cột đã hết chưa. while(more) for(j=1;j<=numcols;j++) { System.out.print(results.getString(j)); System.out.println(); more=results.next(); } results.close(); } catch(Exception e) } System.out.println(e.getMessage()) ; }
Các bước của chương trình:
- Lấy dữ liệu từ kho MetaData.
- Ðếm số cột bằng phương thức getColumnCount() trong ResultSetMetaData. - Tạo biến đối tượng xem xét số cột đã hết chưa (true : còn, false : hết). - Trong khi còn các cột:
- Tạo vòng lặp đếm số cột. - Lấy giá trị tại cột thứ j.
- Gọi tiếp phương thức next() cho các cột còn lại. - Ðóng đối tượng results
- Bắt biệt lệ hết cột xảy ra.
- Trả dữ liệu về kho ResultSetMetaData.
Ta có thể thu được dữ liệu trong ResultSet theo nhiều dạng, phụ thuộc vào kiểu dữ liệu được cất trong mỗi cột. Do đó, ta có thể thu được nội dung của cột mà không cần biết đến số cột hay tên cột.
Chú ý rằng số cột bắt đầu là một (1), không phải là không (0). Một vài phương thức minh họa cho đối tượng ResulSet sau:
♦getInt(int): trả về nội dung của cột được đánh số như là một số integer.
♦getInt(String): Trả về nội dung của cột được đặt tên như là một số integer.
♦getFloat(int): Trả về nội dung của cột được đánh số như là một số float.
♦getFloat(String): Trả về nội dung của cột được đặt tên như là một số float.
♦getDate(int): Trả về ngày tạo lập của cột được đánh số.
♦getDate(String): Trả về ngày tạo lập của cột được đặt tên.
♦next(): Chuyển con trỏ tới hàng kế tiếp và trả về false khi hết hàng.
♦close(): Ðóng đối tượng ResultSet.