Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 43 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
43
Dung lượng
253,7 KB
Nội dung
Chuẩn bị cho kỳ thi 733 Phát triển ứng dụng DB2 9, Phần 2: Thao tác liệu DB2 Tìm hiểu khái niệm Sunil Sabat, Giám đốc liên minh kỹ thuật, IBM Tóm tắt: Tìm hiểu khái niệm việc thao tác liệu sở liệu DB2® Đây Phần loạt gồm chín hướng dẫn mà bạn sử dụng để trợ giúp chuẩn bị cho kỳ thi lấy chứng Phát triển ứng dụng DB2 (kỳ thi 733) Trước bạn bắt đầu Hướng dẫn gồm gì? Hướng dẫn trình bày khái niệm thao tác liệu sở liệu DB2, bao gồm chủ đề sau: Thay đổi liệu (chèn, cập nhật, xóa) Truy vấn sở liệu xuyên nhiều bảng nhiều khung nhìn Sử dụng bảng truy vấn vật chất hóa (các MQT - materialized query tables) Sử dụng hàm SQL DB2 thủ tục lưu sẵn Sử dụng biểu thức bảng chung Xác định sử dụng trỏ (cursor) chương trình SQL Nhận biết kiểu trỏ (chỉ đọc, cập nhật được, cuộn được) Nhận biết phạm vi trỏ Thao tác trỏ Khả thao tác đối tượng lớn (LOBs) (như CLOB [Character Large Objects - đối tượng lớn ký tự] BLOB [Binary Large Object - đối tượng lớn nhị phân]) Quản lý đơn vị công việc (ví dụ, giao dịch) Đây hướng dẫn thứ hai loạt viết gồm bảy hướng dẫn mà bạn sử dụng để trợ giúp chuẩn bị cho kỳ thi lấy chứng Phát triển ứng dụng họ DB2 9.1 IBM (kỳ thi 733) Các tài liệu hướng dẫn chủ yếu trình bày mục tiêu Phần thi, mang tên "Thao tác liệu" Bạn không cần DB2 để hoàn thành hướng dẫn Tuy nhiên, bạn muốn, bạn tải miễn phí DB2 Express-C từ trang phần tải DB2 Express-C (DB2 Express-C downloads page) Ai cần tìm hiểu hướng dẫn này? Để tham dự kỳ thi Phát triển ứng dụng họ DB2 9.1, bạn phải vượt qua kỳ thi họ DB2 9.1 (kỳ thi 730) Bạn sử dụng "Loạt hướng dẫn họ DB2" (DB2 Family Fundamentals tutorial series) (xem phần Tài nguyên) để chuẩn bị cho kỳ thi Đây loạt hướng dẫn phổ biến giúp cho nhiều người hiểu khái niệm họ sản phẩm DB2 Hướng dẫn cơng cụ trợ giúp bạn chuẩn bị cho Kỳ thi 733 Bạn nên xem lại phần Tài nguyên phần cuối hướng dẫn để biết thêm nhiều thông tin Phát triển ứng dụng liên quan đến việc lấy thao tác liệu Trong DB2, quy trình bao gồm số phương pháp Mặc dù phương pháp lập trình theo ngơn ngữ khác nhau, khái niệm ngơn ngữ triển khai thực Hướng dẫn bước mà bạn nên tìm hiểu trước bắt đầu lập trình ứng dụng với DB2 Thay đổi truy cập liệu Thay đổi liệu Thay đổi liệu trình then chốt cần hiểu thiết kế ứng dụng sở liệu Nó phụ thuộc vào vài yếu tố: Mơ hình liệu siêu liệu (Dữ liệu danh mục, kiểu, giới hạn kiểm tra xem bạn có phải đối phó với chúng không?) Các yêu cầu nghiệp vụ (Bạn cần tìm sửa đổi liệu sở liệu nào?) Quyền truy cập đảm bảo an ninh mức người dùng, mức bảng mức cột (Có cho phép thay đổi đặc biệt không?) Các giao diện để truy cập liệu (Bạn giao tiếp với liệu thay đổi nào?) Bạn nên sử dụng khả DB2 việc thiết kế ứng dụng? Người sử dụng sửa đổi liệu danh mục hệ thống Các bảng danh mục khung nhìn lưu trữ siêu liệu định nghĩa vật lý logic liệu Lược đồ SYSIBM sở hữu bảng, khung nhìn với bảng thuộc sở hữu lược đồ SYSCAT Bạn truy vấn danh mục để nhận thơng tin có ích Để thực lựa chọn thích hợp, bạn cần phải xem xét hai, thiết kế sở liệu môi trường đích cho ứng dụng bạn Ví dụ, bạn chọn để áp đặt số quy tắc nghiệp vụ việc thiết kế sở liệu bạn thay cho việc đưa vào logic ứng dụng bạn Các khả mà bạn sử dụng phạm vi mà bạn sử dụng chúng biến đổi nhiều Các khả mà bạn cần phải xem xét bao gồm: Truy cập liệu cách sử dụng: o SQL nhúng, bao gồm SQL nhúng cho Java (SQLJ) o DB2 CLI (DB2 Call Level Interface - Giao diện mức lời gọi DB2), ODBC (Open Database Connectivity – Kết nối sở liệu mở) JDBC o Các đặc tả kỹ thuật Microsoft o DBI Perl o Các sản phẩm truy vấn o Kiểm soát giá trị liệu cách sử dụng: Các kiểu liệu (làm sẵn người dùng định nghĩa) o Các ràng buộc kiểm tra bảng o Các ràng buộc tồn vẹn tham chiếu o Các khung nhìn có sử dụng CHECK OPTION (tùy chọn kiểm tra) o Logic ứng dụng kiểu biến Kiểm soát mối quan hệ giá trị liệu cách sử dụng: o Các ràng buộc toàn vẹn tham chiếu o Các bẫy kiện (Trigger) o Logic ứng dụng Thi hành chương trình máy chủ cách sử dụng: o Các thủ tục lưu sẵn o Các hàm người sử dụng định nghĩa o Các bẫy kiện (Trigger) Lợi chủ yếu việc chuyển giao logic tập trung vào liệu từ ứng dụng sang sở liệu ứng dụng bạn trở nên độc lập liệu Logic xung quanh liệu bạn tập trung vào nơi, sở liệu Điều có nghĩa bạn thay đổi liệu logic liệu lần có ảnh hưởng đến tất ứng dụng phụ thuộc vào liệu Lợi cuối mạnh, bạn phải xem xét đến việc logic liệu đặt vào sở liệu có ảnh hưởng đến tất người sử dụng liệu Bạn phải xem xét xem quy tắc ràng buộc mà bạn muốn áp đặt liệu có áp dụng cho tất người sử dụng liệu hay người dùng ứng dụng riêng lẻ hay khơng Các u cầu ứng dụng bạn giúp bạn định xem có áp đặt quy tắc sở liệu hay ứng dụng khơng Ví dụ, bạn cần xử lý lỗi xác nhận hợp lệ việc nhập liệu vào theo trình tự cụ thể Nói chung, bạn nên thực kiểu xác nhận hợp lệ liệu mã ứng dụng Bạn nên xem xét mơi trường tính tốn nơi ứng dụng sử dụng Bạn cần phải xem xét khác biệt thi hành logic máy khách thi hành logic máy chủ sở liệu (thường mạnh hơn) sử dụng thủ tục lưu sẵn, hàm người dùng định nghĩa (UDFs) kết hợp hai Trong số trường hợp, cách tiếp cận đắn bao gồm thi hành logic ứng dụng (có lẽ tùy theo yêu cầu ứng dụng cụ thể) lẫn thi hành logic sở liệu (có lẽ tùy thuộc vào cách sử dụng tương tác khác bên ứng dụng) Truy cập liệu Trong sở liệu quan hệ, bạn cần phải sử dụng SQL để truy cập liệu mong muốn bạn Tuy nhiên, bạn có lựa chọn cách tích hợp SQL vào ứng dụng bạn Bạn chọn số giao diện ngôn ngữ hỗ trợ sau đây: SQL nhúng C/C++ COBOL FORTRAN Ngơn ngữ Java® (thơng qua SQLJ JDBC) REXX DB2 CLI ODBC Các đặc tả kỹ thuật Microsoft, bao gồm ADO.NET OLE DB Các ngôn ngữ Visual Basic, Visual C++ NET Perl DBI Perl PHP Các sản phẩm truy vấn Lotus Approach (Cách tiếp cận Lotus), IBM Query Management Facility (Tiện ích quản lý truy vấn IBM), Microsoft Access Microsoft Excel Chương trình bạn phải thiết lập kết nối tới máy chủ sở liệu đích trước chạy câu lệnh SQL thực thi Kết nối nhận biết mã nhận dạng (ID) quyền hạn người sử dụng chạy chương trình tên máy chủ sở liệu mà chương trình chạy Nói chung, tiến trình ứng dụng bạn kết nối với máy chủ sở liệu thời điểm Máy chủ gọi máy chủ Tuy nhiên, ứng dụng bạn kết nối đến nhiều máy chủ sở liệu môi trường cập nhật nhiều máy chủ Trong trường hợp này, có máy chủ máy chủ Chương trình bạn thiết lập kết nối tới máy chủ sở liệu tường minh cách sử dụng câu lệnh kết nối, không tường minh, cách kết nối với máy chủ sở liệu mặc định Các ứng dụng Java thiết lập kết nối thông qua cá thể kết nối (Connection) Truy vấn sở liệu xuyên qua nhiều bảng Bạn truy vấn liệu từ nhiều bảng sử dụng câu lệnh SELECT Bạn cần có quyền hạn thích hợp để truy cập liệu mà bạn truy vấn Dữ liệu trả biết đến tập kết Một câu lệnh SELECT rõ tiêu chí cho liệu mà tập kết phải tìm nạp liệu Nó khơng rõ cách thức DB2 trả kết Trình tối ưu hóa DB2 đưa định sau cách xây dựng kế hoạch truy cập dựa vào thống kê sở liệu từ bảng danh mục hệ thống kiểu kế hoạch mà thị phải xem xét Bây xem số câu lệnh SELECT mẫu Câu lệnh chọn tất tên cửa hàng tên sản phẩm từ bảng cửa hàng bảng sản phẩm: SELECT A.STORE_NAME, B.PRODUCT_NAME FROM STORE A, PRODUCT B Store_name (tên cửa hàng) cột bảng có tên cửa hàng (store) Product_name (tên sản phẩm) cột bảng có tên sản phẩm (product) Bây xem ví dụ khác Trong bảng employee (nhân viên), bạn chọn số hiệu phòng ban (WORKDEPT) tiền lương tối đa phòng ban (SALARY) tất phịng ban có tiền lương tối đa thấp tiền lương trung bình tất phòng ban khác: SELECT WORKDEPT, MAX(SALARY) FROM EMPLOYEE EMP_COR GROUP BY WORKDEPT HAVING MAX(SALARY) < (SELECT AVG(SALARY) FROM EMPLOYEE WHERE NOT WORKDEPT = EMP_COR.WORKDEPT) Làm việc với bảng truy vấn vật chất hóa (MQT) Định nghĩa MQT dựa kết truy vấn Các MQT cải thiện đáng kể hiệu truy vấn Hướng dẫn giới thiệu cho bạn MQT, bảng tóm tắt bảng dựng tạm cho bạn, qua ví dụ làm việc, làm để xây dựng chạy với bảng truy vấn vật chất hóa Một MQT bảng mà định nghĩa dựa kết truy vấn Dữ liệu chứa MQT bắt nguồn từ nhiều bảng nêu định nghĩa MQT Các bảng tóm tắt (hoặc bảng tóm tắt tự động [ASTs]), quen thuộc với người sử dụng DB2 IBM cho Linux, UNIX Windows, coi kiểu MQT chuyên biệt Câu lệnh fullselect, phần định nghĩa bảng tóm tắt, chứa mệnh đề GROUP BY tóm tắt liệu từ bảng tham chiếu fullselect Bạn coi MQT loại khung nhìn vật chất hóa Cả khung nhìn lẫn MQT định nghĩa sở truy vấn Truy vấn khung nhìn định nghĩa chạy khung nhìn tham chiếu Tuy nhiên, MQT thực tế lưu trữ kết truy vấn liệu bạn làm việc với liệu có MQT thay cho liệu có bảng bên Các MQT cải thiện đáng kể hiệu truy vấn, đặc biệt truy vấn phức tạp Nếu trình tối ưu hóa xác định truy vấn hay phần truy vấn giải cách sử dụng MQT, truy vấn viết lại để tận dụng lợi ích MQT Vào lúc tạo bảng, MQT định nghĩa trì hệ thống trì người sử dụng Dữ liệu kiểu bảng truy vấn vật chất hóa trì hệ thống Khi bạn tạo kiểu MQT này, bạn xác định xem liệu bảng REFRESH IMMEDIATE hay REFRESH DEFERRED Từ khóa REFRESH (làm mới) cho phép bạn rõ liệu trì DEFERRED có nghĩa liệu bảng làm vào lúc sử dụng câu lệnh REFRESH TABLE Các MQT trì hệ thống, REFRESH DEFERRED lẫn REFRESH IMMEDIATE không cho phép hoạt động chèn, cập nhật xóa thực chúng Tuy nhiên, MQT trì hệ thống với chế độ REFRESH IMMEDIATE cập nhật theo Việc sử dụng câu lệnh gây chút bối rối câu lệnh khơng thi hành Nói cách khác, câu lệnh xử lý riêng giai đoạn chuẩn bị ứng dụng nhúng đến câu lệnh DECLARE thời gian thực chương trình, khơng có xảy Công việc bắt đầu thực trỏ mở Yêu cầu câu lệnh DECLARE CURSOR xuất trước câu lệnh OPEN tệp tin nguồn Nó chí khơng cần phải nằm hàm C Tên trỏ phải tệp tin nguồn khai báo Nếu bạn sử dụng SQL động, câu lệnh DECLARE CURSOR có khác chút Thay bao gồm cú pháp câu lệnh SELECT bạn nên sử dụng tên câu lệnh Tên câu lệnh phải phù hợp với tên sử dụng chuẩn bị câu lệnh SELECT có liên quan Ví dụ: EXEC SQL PREPARE STMT1 FROM :STRINGSTMT; EXEC SQL DECLARE C3 CURSOR FOR STMT1; Mở trỏ SQL nhúng Việc mở trỏ chuẩn bị hàng tập kết truy vấn chương trình sử dụng Nó định vị trỏ trước hàng kết đầu tiên, hàng khơng thể truy cập chương trình lệnh tìm nạp thi hành Thơng thường, việc mở nơi cần sử dụng lượng thời gian lớn thi hành truy vấn, có mệnh đề ORDER BY GROUP BY câu lệnh chọn Cú pháp câu lệnh OPEN đơn giản Để mở trỏ có tên "c0", bạn sử dụng lệnh sau: OPEN C0 Tìm nạp trỏ SQL nhúng Việc thi hành lệnh tìm nạp dựa vào trỏ làm cho hàng tập kết sẵn sàng cho chương trình xử lý, thơng thường cách đặt giá trị cột tập kết vào biến chủ Cột thứ n tập kết đặt biến chủ thứ n tìm nạp Ví dụ, trỏ c0 khai báo cho lệnh Select name, dept, id from staff, câu lệnh Fetch c0 into :hv1, :hv2, :hv3 đặt giá trị cột name vào hv1, dept vào hv2 id vào hv3 Nếu cột tập kết có khả rỗng (nullable), mã nhận dạng biến chủ thứ hai (chỉ báo null) sử dụng DB2 lưu trữ giá trị âm biến để biểu diễn giá trị null trả Ví dụ, thay đổi ví dụ trước thành Fetch c0 into :hv1, :hv2 :hv2ind, :hv3 cho phép chương trình biết hàng nhân viên có cột phịng ban null Thơng thường, việc tìm nạp đặt bên vịng lặp chương trình, viết để tiếp tục trả SQLCODE +100 Tại thời điểm này, tất hàng tập kết nạp xong Cập nhật xoá hàng với trỏ Như đề cập trước đó, việc cập nhật xóa định vị thực hàng mà trỏ định vị Một việc tìm nạp phải thực trước khơng trả SQLCODE +100 ((hay lỗi) Mỗi hàng có tập kết xử lý theo cách không hàng chúng xử lý, hay số lượng hàng Dưới ví dụ: EXEC SQL DECLARE CURSOR C0 FOR SELECT NAME, SALARY FROM STAFF FOR UPDATE OF DEPT; EXEC SQL FETCH C0 INTO :HVNAME, :HVSAL; /* THERE MIGHT BE PROGRAM LOGIC HERE TO CHECK THE EMPLOYEE NAME AND SALARY */ /* AND ONLY EXECUTE THE UPDATE IF SOME CRITERIA APPLY */ EXEC SQL UPDATE STAFF SET DEPT = :NEWDEPT WHERE CURRENT OF C0; Mã lệnh lấy thông tin nhân viên từ bảng STAFF cho phép cập nhật phòng ban nhân viên Câu lệnh DECLARE CURSOR cung cấp truy vấn, liệt kê cột name cột salary cột trả cho biết cột dept (phịng ban) cập nhật số hàng Câu lệnh FETCH đặt giá trị nhân viên tiền lương vào biến chương trình Câu lệnh UPDATE sử dụng để thay đổi giá trị cột dept hàng tìm nạp trước thành giá trị biến chương trình newdept Mặc dù khơng hiển thị đây, logic chương trình thường sử dụng để tạo vịng lặp đến điểm cuối tập kết sử dụng để cập nhật số hàng định Đóng trỏ Đóng trỏ giải phóng nhớ dành cho trỏ làm cho trỏ không sẵn sàng để sử dụng thêm Cú pháp đơn giản: CLOSE C0 Theo mặc định, việc đóng trỏ khơng giải phóng khóa mà giữ Để thực điều này, thêm vào mệnh đề WITH RELEASE: CLOSE C0 WITH RELEASE Điều làm cho DB2 cố gắng để giải phóng tất khóa đọc Tuy nhiên, DB2 giữ tất khóa hàng cập nhật cần phải giữ lại số khóa đọc cho phép tốn hoạt động khác Con trỏ đóng lúc mở Tức là, khơng cần phải tìm nạp tồn tập kết trước đóng trỏ Sau trỏ đóng lại, mở lại hoạt động chưa sử dụng trước Quản lý đơn vị cơng việc Một giao dịch gì? Thuật ngữ đơn vị cơng việc (unit of work-UOW), có nghĩa với khái niệm giao dịch Nó định nghĩa gồm không hay nhiều truy vấn SQL mà cần thi hành hoạt động không chia cắt (atomic) Ví dụ, khách hàng thực giao dịch mua hàng trực tuyến từ trang Web IBM, có ba bước phải thực hiện: Cập nhật kiểm kê hàng hóa gian hàng (mall) Web IBM Khách hàng phải trả tiền cho mục mua Mỗi mục mua phải vận chuyển Điều xảy ghi kiểm kê hàng hóa cập nhật khách hàng trả tiền, vận đơn không tạo ra? Không bạn có khách hàng tức giận khơng nhận hàng hóa mua mình, mà bạn cịn gây lỗi làm xác kê hàng kho Vì vậy, tất truy vấn SQL để mua hàng phải định nghĩa hoạt động không chia cắt Các bước giao dịch Bây xem bước cần phải đưa vào giao dịch DB2 Trước bạn bắt đầu, kết nối phải thiết lập với sở liệu mà giao dịch thi hành Bắt đầu giao dịch với câu lệnh thi hành Một câu lệnh thi hành luôn xảy với giao dịch Nếu chương trình có chứa câu lệnh thi hành sau giao dịch kết thúc, bắt đầu giao dịch Những câu lệnh không thi hành được: BEGIN DECLARE SECTION END DECLARE SECTION INCLUDE SQLCA INCLUDE SQLDA DECLARE CURSOR WHENEVER Kết thúc giao dịch theo cách sau đây: COMMIT ROLLBACK Câu lệnh COMMIT kết thúc giao dịch làm cho thay đổi trở thành thấy tiến trình khác Hãy nhớ rằng, bạn nên thường xuyên cam kết thực điều trước chấm dứt chương trình DB2 tự động phục hồi giao dịch bạn không cam kết chúng tường minh hệ điều hành Windows Trên hệ điều hành khác, DB2 cam kết tất giao dịch treo chưa xử lý thời gian chấm dứt chương trình tự động Câu lệnh ROLLBACK (phục hồi lại) trả sở liệu trạng thái mà có trước giao dịch chạy Rollback ngăn việc áp dụng thay đổi cho sở liệu sau cam kết giao dịch cuối Điều đảm bảo tất hoạt động giao dịch cam kết không hoạt động cam kết DB2 phục hồi thay đổi điều kiện sau đây: Một điều kiện đầy ghi Một điều kiện hệ thống làm cho tiến trình hệ thống kết thúc Để tránh hỏng vòng lặp, sử dụng WHENEVER SQLWARNING CONTINUE (tiếp tục có cảnh báo SQL) hay WHENEVER SQLERROR CONTINUE (tiếp tục có lỗi SQL) trước câu lệnh ROLLBACK Một câu lệnh ROLLBACK khơng có hiệu lực nội dung biến chủ Bạn nên chấm dứt ứng dụng bạn cách thực theo bước sau: Kết thúc giao dịch bạn lệnh COMMIT ROLLBACK Giải phóng kết nối bạn lệnh CONNECT RESET (khởi động lại kết nối) Giải phóng tài nguyên (chẳng hạn lưu trữ tạm thời, cấu trúc liệu nhớ có chia sẻ) Bạn có nhiều giao dịch ứng dụng Trong giao dịch, bạn có nhiều kết nối tới sở liệu Các kết nối giao dịch Các giao diện lập trình có hai loại kết nối: giao dịch khơng giao dịch Mặc dù DB2 hỗ trợ khái niệm này, bạn nên lưu ý thực có kiểu kết nối tới sở liệu kết nối giao dịch Vì vậy, truy vấn SQL phần giao dịch Khi bạn chạy chế độ không giao dịch, giao diện lập trình mà bạn sử dụng bật cho phép tính gọi cam kết tự động (autocommit), đưa câu lệnh COMMIT ngầm sau phép tốn SQL Bạn phải đảm bảo khơng bật cho phép cam kết tự động đơn vị cơng việc (UOW) bạn có nhiều truy vấn Các điểm lưu trữ giao dịch Một điểm lưu trữ (savepoint) cấu để hồi lại (undo) công việc thực hệ thống quản lý sở liệu (DBMS) yêu cầu sở liệu bị thất bại Các điểm lưu trữ làm cho yêu cầu xử lý sở liệu phân chia (non-atomic) hoạt động theo cách không phân chia (atomic) Nếu lỗi xảy q trình thi hành, điểm lưu trữ dùng để hồi lại thay đổi thực giao dịch từ thời điểm mà điểm lưu trữ bắt đầu đến thời điểm yêu cầu phục hồi điểm lưu trữ Một điểm lưu trữ cho phép bạn nhóm vài câu lệnh SQL thành khối thi hành riêng lẻ Trước thi hành câu lệnh khối, đòi hỏi phải có yêu cầu khởi động điểm lưu trữ khối Nếu câu lệnh kết thúc lỗi, có câu lệnh cuộn lại Điều mang lại mức chi tiết mịn so với câu lệnh SQL phức hợp, lỗi làm cho tồn khối kết thúc có lỗi phục hồi toàn câu lệnh SQL phức hợp Tại cuối điểm lưu trữ khối câu lệnh, bạn giải phóng điểm lưu trữ hay phục hồi tới điểm lưu trữ Bây xem xét số câu lệnh SQL cho phép bạn tạo kiểm soát điểm lưu trữ Để thiết lập điểm lưu trữ, đưa câu lệnh SQL SAVEPOINT Để làm cho mã lệnh bạn rõ ràng hơn, bạn chọn tên có ý nghĩa cho điểm lưu trữ Ví dụ: SAVEPOINT SAVEPOINT1 ON ROLLBACK RETAIN CURSORS Để giải phóng điểm lưu trữ , đưa câu lệnh SQL RELEASE SAVEPOINT Ví dụ: RELEASE SAVEPOINT SAVEPOINT1 Nếu bạn khơng giải phóng dứt khốt điểm lưu trữ câu lệnh SQL RELEASE SAVEPOINT, giải phóng kết thúc giao dịch Để phục hồi lại điểm lưu trữ , đưa câu lệnh SQL ROLLBACK TO SAVEPOINT Ví dụ: ROLLBACK TO SAVEPOINT SAVEPOINT1 Làm việc với đối tượng lớn Một đối tượng lớn gì? Các đối tượng liệu lớn, hình ảnh âm thanh, thường xuyên cần phải lưu giữ sở liệu DB2 cung cấp kiểu liệu chuyên dụng để lưu trữ đối tượng liệu lớn Các kiểu liệu biết đến đối tượng lớn (LOBs) Trong phần này, bạn khám phá giới LOB Với tư cách nhà phát triển, bạn cần có khả lưu trữ lấy LOB ứng dụng bạn DB2 cung cấp ba kiểu khác kiểu liệu LOB Tất kiểu liệu chứa tới gigabyte liệu: CLOB Chứa đến gigabytes liệu ký tự BLOB Chứa đến gigabyte liệu nhị phân Dữ liệu nhị phân có thể, thực chất, thứ (ví dụ hình ảnh tệp tin âm thanh) Double-Byte Character Large Object (DBCLOB-Đối tượng lớn ký tự hai byte) Chứa đến gigabytes liệu ký tự hai byte Lưu ý kiểu liệu nên sử dụng sở liệu mà bạn tạo cấu hình cho liệu hai byte XML Chứa đến gigabyte liệu XML XML khơng trình bày hướng dẫn này, chúng trình bày sau loạt Các giá trị LOB không lưu giữ bảng sở liệu Cái thực lưu trữ mô tả (descriptor) Cái mô tả trỏ đến vị trí thực tế LOB Các giá trị LOB thực lưu trữ vùng bảng (tablespaces) Các vùng bảng đơn vị lưu trữ vật lý Cái thực lưu trữ cột LOB thực tế liệu LOB, mà thực tế trỏ (pointer) tới liệu LOB Con trỏ biết đến định vị ("locator") Những định vị sử dụng để đại diện cho giá trị LOB bạn Khi bạn lấy liệu ResultSet (tập kết quả), bạn lấy định vị giá trị LOB thực mà chúng đại diện Bạn phải yêu cầu tường minh để nhận giá trị LOB cần lấy Việc lấy gọi "vật chất hóa" Khi tạo bảng, bạn rõ tùy chọn COMPACT NOT COMPACT Nếu lựa chọn COMPACT xác định, liệu LOB mà bạn lưu trữ chiếm không gian lưu trữ tối thiểu Tuy nhiên, bạn thực cập nhật cột LOB mà làm tăng kích cỡ LOB lưu trữ, bạn phải trả giá hiệu Mặt khác, bạn rõ NOT COMPACT (mặc định), giá trị LOB bạn thực chất tự gia tăng kích cỡ Nếu bạn rõ tùy chọn LOGGED, cập nhật cột LOB ghi lại nhật ký hệ thống Việc định rõ tùy chọn LOGGED cung cấp bảo vệ tốt cho hầu hết liệu lưu trữ, cho xây dựng lại trường hợp xảy lỗi phương tiện trình phục hồi thuận chiều Tuy nhiên, điều kèm với chi phí nói đến khơng gian đĩa (chưa đề cập đến chi phí thời gian để ghi vào đĩa) Nếu bạn không định rõ lựa chọn, tùy chọn LOGGED chọn theo mặc định Bây xem xét số ví dụ Java PREPAREDSTATEMENT PREPAREDSTATEMENT = CONNECTION.PREPARESTATEMENT("INSERT INTO BOOKCOVERS VALUES(?,?)"); FILE IMAGEFILE = NEW FILE("C:\\REDBOOKCOVER.JPG"); INPUTSTREAM INPUTSTREAM = NEW FILEINPUTSTREAM(IMAGEFILE); PREPAREDSTATEMENT.SETSTRING(1," 0738425826"); PREPAREDSTATEMENT.SETBINARYSTREAM(2,INPUTSTREAM,(INT)(IMAGEFILE.LENG PREPAREDSTATEMENT.EXECUTEUPDATE(); Đoạn mã lấy tệp tin có tên redbookcover.jpg nằm thư mục gốc ổ đĩa C: lưu trữ vào sở liệu Lưu ý cách bạn kết hợp tệp tin bạn với InputStream Đối tượng InputStream sử dụng để đặt giá trị câu lệnh chuẩn bị đại diện cho cột BLOB bạn PREPAREDSTATEMENT PREPAREDSTATEMENT = CONNECTION.PREPARESTATEMENT( "SELECT BOOKCOVER FROM BOOKCOVERS WHERE BOOKISBN=?"); PREPAREDSTATEMENT.SETSTRING(1, "0738425826"); RESULTSET RESULTSET = PREPAREDSTATEMENT.EXECUTEQUERY(); WHILE (RESULTSET.NEXT()) { // MATERIALIZATION OF THE BLOB BLOB BLOB = RESULTSET.GETBLOB(1); INPUTSTREAM INPUTSTREAM = BLOB.GETBINARYSTREAM(); FILE FILEOUTPUT = NEW FILE("C:\\CLONEDREDBOOKCOVER.JPG"); FILEOUTPUTSTREAM FO = NEW FILEOUTPUTSTREAM(FILEOUTPUT); INT C; WHILE ((C = INPUTSTREAM.READ()) != -1) FO.WRITE(C); FO.CLOSE(); SYSTEM.OUT.PRINTLN("BLOB RETRIEVED"); Trong đoạn mã Java trên, câu lệnh chuẩn bị thi hành BLOB chèn vào sở liệu đoạn mã trước chọn lấy Điều quan trọng cần lưu ý BLOB thực chưa vật chất hóa dòng: INPUTSTREAM INPUTSTREAM = BLOB.GETBINARYSTREAM(); Luồng đầu vào sử dụng để lưu trữ BLOB lấy thành tệp tin gọi clonedredbookcover.jpg Để lấy CLOB, cú pháp tương tự với cú pháp để lấy BLOB FILE FILEOUTPUT = ;NEW; FILE("C:\\CLONEDREDBOOKABSTRACT.TXT"); FILEOUTPUTSTREAM FO = ;NEW; FILEOUTPUTSTREAM(FILEOUTPUT); INPUTSTREAM IS = CLOB.GETASCIISTREAM(); INT C; WHILE; ((C = IS.READ()) != -1) FO.WRITE(C); FO.CLOSE(); Trong đoạn mã Java trên, CLOB lưu trữ vật chất hóa thành tệp tin có tên clonedredbookabstract.txt Điều thực cách sử dụng phương thức getAsciiStream CLOB Giống bạn lấy BLOB, bạn gán luồng vào InputStream, mà sau đọc ghi đọc tới FileOutputStream Tóm tắt Trong hướng dẫn này, bạn học nhiều khái niệm chiến lược thao tác liệu Bạn học làm để: Truy cập liệu nhiều bảng thay đổi chúng Sử dụng MQT Sử dụng thường trình SQL Sử dụng bảng chung Sử dụng trỏ Sử dụng kiểu liệu CLOB BLOB Lập trình với giao dịch Trong hướng dẫn tập trung vào khái niệm, hướng dẫn loạt mô tả tất giao diện sử dụng để thực thao tác liệu ... mà bạn sử dụng để trợ giúp chuẩn bị cho kỳ thi lấy chứng Phát triển ứng dụng họ DB2 9.1 IBM (kỳ thi 733) Các tài liệu hướng dẫn chủ yếu trình bày mục tiêu Phần thi, mang tên "Thao tác liệu" Bạn... Phát triển ứng dụng họ DB2 9.1, bạn phải vượt qua kỳ thi họ DB2 9.1 (kỳ thi 730) Bạn sử dụng "Loạt hướng dẫn họ DB2" (DB2 Family Fundamentals tutorial series) (xem phần Tài nguyên) để chuẩn bị. .. dụng hàm liệu lấy Việc mở rộng hàm sở liệu cho phép sở liệu lợi dụng hàm máy mà ứng dụng sử dụng, cung cấp thêm hiệp lực ứng dụng sở liệu Việc sử dụng hàm góp phần vào nâng cao suất cho nhà phát