Truy xuất Cơ sở dữ liệu trong java:

Một phần của tài liệu GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH JAVA (Trang 28 - 30)

Một khi đã kết nối được tới cơ sở dữ liệu, điều ta đòi hỏi là các thông tin tên bảng, tên cột, nội dung của các cột, và ta có thể chạy SQL mà không cần phải truy vấn đến cơ sở dữ liệu, hoặc thêm vào, hoặc sửa chữa lại nội dung của nó. Các đối tượng mà ta có thể sử dụng để thu được các thông tin từ cơ sở dữ liệu là:

♦DatabaseMetaData: thông tin đầy đủ về cơ sở dữ liệu: tên bảng, tên các chỉ mục của bảng, tên sản phẩm cơ sở dữ liệu, version và các hoạt động được cung cấp bởi cơ sở dữ liệu.

♦ ResultSet: thông tin về một bảng hay kết quả của một truy vấn. Ta có thể truy xuất tới hàng dữ liệu bởi một hàng, nhưng có thể truy xuất tới các cột bằng nhiều cách khác.

♦ResultSetMetaData: thông tin về một tên cột, các kiểu của cột trong đối tượng ResultSet.

Trong khi mỗi đối tượng này có một số lượng lớn các phương thức hướng dẫn ta lấy được các thông tin chi tiết chính về các phần tử của cơ sở dữ liệu. Có một vài phương thức chính trong mỗi đối tượng này cho ta những thông tin đầy ý nghĩa về cơ sở dữ liệu của ta.

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.

d.Ðối Tượng ResultSetMetaData:

Ta thu được đối tượng ResultSetMetaData từ đối tượng ResulSet khi sử dụng phương thức getMetaData(). Ta có thể sử dụng đối tượng này để tìm số và kiểu của cột cũng như tên của mỗi cột.

♦ getColumnCount(): Trả về số cột trong ResultSet. ♦getColumnName(int): Trả về tên của cột được đánh số. ♦getColumnLabel(int): Trả về nhãn của cột được đánh số.

♦Iscurrency(int): Trả về true nếu cột này chứa một số trong Currency Unit. ♦IsReadOnly(int): Trả về true khi nội dung trong cột là read only. (adsbygoogle = window.adsbygoogle || []).push({});

♦IsAutoIncrement(int): Trả về true nếu cột tự động tăng lên. Các cột này thường là khóa và là read only.

♦getColumnTypes(int): Trả về kiểu dữ liệu SQL cho cột này. Những kiểu dữ liệu này bao gồm: BIGINT, BINARY, BIT, CHAR, DATE, DECIMAL, DOUBLE, FLOAT, INTEGER, LONGVABINARY, LONGVACHAR, NULL, NUMERIC, OTHER, REAL, SMALLINT, TIME, TIMESTAMP, TINYINT, VARBINARY, và VARCHAR.

e.Ðối Tượng DatabaseMetaData:

Ðối tượng này cho ta thông tin về cơ sở dữ liệu hiện hành. Ta sử dụng nó một cách chính thức để lấy tên của bảng trong cơ sở dữ liệu, và tên của cột trong bảng. Do có nhiều

cơ sở dữ liệu khác nhau nên chúng cung cấp nhiều sự khác biệt của SQL. Sau đây là một số phương thức mà nó có thể truy vấn đến cơ sở dữ liệu như những gì mà nó cung cấp cho SQL:

♦getCatalogs(): Trả về danh sách catalogs của các thông tin trong cơ sở dữ liệu. Với cầu driver JDBC_ODBC ta đã có một danh sách của cơ sở dữ liệu được ghi bằng

ODBC. Rất hiếm khi Catalog được sử dụng trong cơ sở dữ liệuJDBC_ODBC.

♦getTables(catalog, schema, tablename, columnname): Trả về diện mạo của tất cả các bảng được gom trong tablename, và tất cả các cột gom lại trong tên cột.

♦getColumns(catalog, schema, tablename, columnname) ♦getURL(): Lấy tên của URL mà ta kết nối tới.

♦getDriverName(): Lấy tên của driver mà ta kết nối tới.

Một phần của tài liệu GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH JAVA (Trang 28 - 30)