Scrollable ResultSet Với phiên bản 1.0, ResultSet chỉ có thể duyệt theo 1 chiều là forward Với phiên bản 2.0, ResultSet có thể duyệt cả chiều forward và backward.. Sự thay đổi nằm ở c
Trang 1Các khái niệm mới của JDBC 2.0
Đào Anh Tuấn – datuan@fit.hcmuns.edu.vn
Trang 2Scrollable ResultSet
Với phiên bản 1.0, ResultSet chỉ có thể duyệt theo 1 chiều là forward
Với phiên bản 2.0, ResultSet có thể duyệt cả chiều forward và backward Sự thay đổi nằm ở câu lệnh
createStatement:
Statement stmt =
con.createStatement( ResultSet.TYPE_SCROLL_SENSITI
VE , ResultSet.CONCUR_READ_ONLY );
ResultSet trả về bởi statement này sẽ có khả năng di chuyển theo 2 hướng:
ResultSet srs = stmt.executeQuery("SELECT
COF_NAME, PRICE FROM COFFEES");
Trang 3 createStatement (int resultSetType,
int resultSetConcurrency)
Type:
TYPE_FORWARD_ONLY : chỉ duyệt chiều tiến tới
TYPE_SCROLL_INSENSITIVE : duyệt 2 chiều, khi duyệt không
chú ý đến sự thay đổi dữ liệu
TYPE_SCROLL_SENSITIVE : duyệt 2 chiều, có phát hiện thay
đổi dữ liệu.
Concurrency:
CONCUR_READ_ONLY : ResultSet chỉ đọc, muốn thay đổi dữ
liệu phải dùng câu lệnh executeUpdate();
CONCUR_UPDATABLE : ResultSet có khả năng thay đổi dữ liệu
Trang 4Duyệt ResultSet
next(): duyệt tiến, khi hết dòng sẽ trả về false
previous(): duyệt lùi, khi hết dòng sẽ trả về false
afterLast(),beforeFirst(): nhảy về sau dòng cuối cùng, trước dòng đầu tiên
absolute(n): nhảy đến dòng thứ n,
n là số dương: ví dụ +1, nhảy đến dòng đầu
n là số âm: ví dụ -1, nhảy đến dòng kế cuối
relative(n): nhảy lên (nếu n>0), hoặc nhảy lùi về (nếu n<0) n dòng
first(),last()
getRow(): cho biết đang ở dòng bao nhiêu
Trang 5Update với ResultSet
Jump đến dòng cần update, thực thi các câu lệnh
updateXXX() Ví dụ:
Statement stmt =
con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet CONCUR_UPDATABLE );
ResultSet uprs = stmt.executeQuery("SELECT COF_NAME, PRICE FROM COFFEES");
uprs.last(); //Nhảy đến dòng cuối
uprs.update Float ("PRICE", 10.99);
uprs.updateRow(); //Thực thi update
Trang 6 ResultSet có một dòng đặc biệt, gọi là Insert Row
Jump đến insert row, sau đó thực thi các lệnh update uprs.moveToInsertRow();
uprs.updateString("COF_NAME", "Kona");
uprs.updateInt("SUP_ID", 150);
uprs.updateFloat("PRICE", 10.99);
uprs.updateInt("SALES", 0); uprs.updateInt("TOTAL", 0);
uprs.insertRow(); //Thực thi insert
Trang 7Di chuyển đến dòng cần delete:
uprs.absolute(4);
uprs.deleteRow();
Trang 8Batch Update
Thực hiện nhiều câu lệnh Update cùng lúc.
con.setAutoCommit(false);
Statement stmt = con.createStatement();
stmt.addBatch("INSERT INTO COFFEES" +
"VALUES('Amaretto', 49, 9.99, 0, 0)");
stmt.addBatch("INSERT INTO COFFEES" +
"VALUES('Hazelnut', 49, 9.99, 0, 0)");
stmt.addBatch("INSERT INTO COFFEES" +
"VALUES('Amaretto_decaf', 49, 10.99, 0, 0)"); stmt.addBatch("INSERT INTO COFFEES" +
"VALUES('Hazelnut_decaf', 49, 10.99, 0, 0)");
int [] updateCounts = stmt executeBatch ();
con.commit();