Java JDBC được sử dụng để kết nối đến database. Bạn có thể truy cập bất kỳ dữ liệu nào từ database, spreadsheets hoặc file bằng cách sử dụng JDBC.
Trong Java 7, Java đã giới thiệu các tính năng sau:
1) Nó cung cấp khả năng sử dụng câu lệnh try-with-resources để tự động đóng các tài nguyên kiểu Connection, ResultSet và Statement.
2) RowSet 1.1: Sự ra đời của interface RowSetFactory và lớp RowSetProvider, cho phép bạn tạo tất cả các hàng được trình điều khiển JDBC hỗ trợ.
Nội dung chính
RowSetFactory Interface
Nó định nghĩa các bản cài đặt của factory được sử dụng để đạt được các kiểu khác nhau của kiểu RowSet.
Các phương thức của RowSetFactory Interface
Phương thức | Mô tả |
---|---|
CachedRowSet createCachedRowSet() throws SQLException | Nó tạo ra một thể hiện mới của FilteredRowSet. Nó ném SQLException, nếu không thể tạo một CachedRowSet. |
FilteredRowSet createFilteredRowSet() throws SQLException | Nó tạo ra một thể hiện mới của FilteredRowSet. Nó ném SQLException, nếu một FilteredRowSet không thể được tạo ra. |
JdbcRowSet createJdbcRowSet() throws SQLException | Nó tạo ra một thể hiện mới của JdbcRowSet. Nó ném SQLException, nếu không thể tạo JdbcRowSet. |
JoinRowSet createJoinRowSet() throws SQLException | Nó tạo ra một thể hiện mới của JoinRowSet. Nó ném SQLException, nếu một JoinRowSet không thể được tạo ra. |
WebRowSet createWebRowSet() throws SQLException | Nó tạo ra một thể hiện mới của WebRowSet. Nó ném SQLException, nếu một WebRowSet không thể được tạo ra. |
Lớp Java RowSetProvider
Nó là một factory API giúp các ứng dụng để có được bản cài đặt của RowSetFactory có thể được sử dụng để tạo ra các kiểu RowSet khác nhau.
Phương thức | Mô tả |
---|---|
public static RowSetFactory newFactory() throws SQLException | Nó tạo ra một thể hiện mới của một RowSetFactory. Nó ném SQLException, nếu lớp factory mặc định không thể được nạp hoặc khởi tạo. |
public static RowSetFactory newFactory(String factoryClassName, ClassLoader cl) throws SQLException | Nó tạo ra một thể hiện mới của một RowSetFactory từ tên lớp factory được chỉ định. Chức năng này rất hữu ích khi có nhiều provider trong classpath. Nó cho phép kiểm soát nhiều hơn đối với ứng dụng vì nó có thể chỉ định provider nào nên được nạp. Nó ném SQLException, nếu factoryClassName là null, hoặc không thể tải lớp factory. |
Ví dụ JDBC - kết nối MySQL sử dụng Try-With-Resources
package vn.kienthuclaptrinh; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class JdbcExample1 { public static void main(String args[]) { try (//su dung try-with-resources // tao connection Connection con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/student", "root", "1234567890"); // tao statement Statement stmt = con.createStatement(); // thuc thi sql query ResultSet rs = stmt.executeQuery("select * from user");) { // lap cac phan tu ResultSet while (rs.next()) { System.out.println(rs.getInt(1) + " " + rs.getString(2) + " " + rs.getString(3)); } } catch (Exception e) { // xu ly ngoai le System.out.println(e.getMessage()); } } }
Trong ví dụ trên, chúng ta sử dụng try-with-resources. Nó được sử dụng để đóng tài nguyên sau khi hoàn thành khối try. Bây giờ, bạn không cần đóng kết nối cơ sở dữ liệu một cách rõ ràng.
Đảm bảo bạn đang sử dụng phiên bản JDBC 4.0 trở lên và Java phiên bản 1.6 trở lên.
RowSet 1.1
Trong các phiên bản trước của Java, bạn đã tạo ra các thể hiện của JdbcRowSet, CachedRowSet, FilteredRowSet vv bằng cách sử dụng lớp JdbcRowSetImpl.
Bây giờ, Java 7 đã thêm một RowSet phiên bản 1.1. Vì vậy, bạn có thể tạo thể hiện của JdbcRowSet bằng cách sử dụng giao diện RowSetFactory.
Java CachedRowSet
Nó lưu trữ (cache) dữ liệu vào bộ nhớ để có thể thực hiện các hoạt động trên dữ liệu riêng của nó chứ không phải là dữ liệu được lưu trữ trong cơ sở dữ liệu. Nó có thể hoạt động mà không được kết nối với nguồn dữ liệu của nó, đó là lý do tại sao, nó còn được gọi là disconnectedRowSet.
Ví dụ Java JDBC: CachedRowSet
package vn.kienthuclaptrinh; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import javax.sql.rowset.CachedRowSet; import javax.sql.rowset.RowSetProvider; public class JdbcExample2 { public static void main(String args[]) throws Exception { try (// su dung try-with-resources // tao connection Connection con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/student", "root", "1234567890"); // tao statement Statement stmt = con.createStatement(); // thuc thi sql query ResultSet rs = stmt.executeQuery("select * from user");) { // tao CachedRowSet CachedRowSet cRS = RowSetProvider.newFactory().createCachedRowSet(); // điền dữ liệu ResultSet vào CachedRowSet cRS.populate(rs); while (cRS.next()) { System.out.println(cRS.getInt(1) + " " + cRS.getString(2) + " " + cRS.getString(3)); } } catch (Exception e) { // xy ly ngoai le System.out.println(e); } } }
Java JdbcRowSet
Nó là một đối tượng được cải tiến ResultSet được sử dụng để duy trì kết nối đến một nguồn dữ liệu. Nó tương tự như ResultSet, nhưng sự khác biệt lớn là nó cung cấp tập hợp các thuộc tính và listener như một JavaBeans. Mục đích chính của JdbcRowSet là làm cho một ResultSet có thể cuộn và cập nhật được.
Trong ví dụ sau, chúng ta sẽ tạo thể hiện của JdbcRowSet bằng cách sử dụng cách tiếp cận mới.
Ví dụ 1 Java JdbcRowSet
package vn.kienthuclaptrinh; import javax.sql.rowset.JdbcRowSet; import javax.sql.rowset.RowSetProvider; public class JdbcExample3 { public static void main(String args[]) throws Exception { try (// su dung try-with-resources // tao connection JdbcRowSet jRS = RowSetProvider.newFactory().createJdbcRowSet();) { // thiet lap ket noi database jRS.setUrl("jdbc:mysql://localhost:3306/student"); // thiet lap username jRS.setUsername("root"); // thiet lap password jRS.setPassword("1234567890"); // thiet lap sql query de thuc thi jRS.setCommand("select * from user"); // thuc thi query jRS.execute(); while (jRS.next()) { System.out.println(jRS.getInt(1) + " " + jRS.getString(2) + " " + jRS.getString(3)); } } catch (Exception e) { // xu ly ngoai le System.out.println(e); } } }
Ví dụ 2 Java JdbcRowSet: update row
package vn.kienthuclaptrinh; import javax.sql.rowset.JdbcRowSet; import javax.sql.rowset.RowSetProvider; public class JdbcExample4 { public static void main(String args[]) throws Exception { try (// su dung try-with-resources // tao connection JdbcRowSet jRS = RowSetProvider.newFactory().createJdbcRowSet();) { // thiet lap ket noi database jRS.setUrl("jdbc:mysql://localhost:3306/student"); // thiet lap username jRS.setUsername("root"); // thiet lap password jRS.setPassword("1234567890"); // thiet lap sql query de thuc thi jRS.setCommand("select * from user"); // thuc thi query jRS.execute(); // try van row thu 3 jRS.absolute(3); System.out.println(jRS.getInt(1) + " " + jRS.getString(2) + " " + jRS.getString(3)); // update row 3 jRS.updateString("name", "David Bishop"); jRS.updateRow(); // try van row thu 3 mot lan nua System.out.println(jRS.getInt(1) + " " + jRS.getString(2) + " " + jRS.getString(3)); } catch (Exception e) { // xu ly ngoai le System.out.println(e); } } }
Kết quả:
3 David 6677028 3 David Bishop 6677028