Giao Trinh Hệ Quảng Trị Cơ Sở Dữ Liệu TRƯỜNG ĐẠI HỌC CẦN THƠ KHOA CÔNG NGHỆ THÔNG TIN TT GIÁO TRÌNH HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU Nội Dung : Quyển giáo trình được cấu trúcthành hai phần gồm sáu chương và các phụ lục. Trong đó phần 1 giới thiệu về lýthuyết cơ bản trong HQTCSDL gồm có các chương như: Chương 1 trình bày các kháiniệm chính trong HQTCSDL và vai trò của nhà quản trị CSDL; Chương 2 giới thiệucác biện pháp bảo vệ CSDL đặc biệt là vấn đề cấp quyền, sao lưu và phục hồi cũngnhư toàn vẹn trong CSDL; Chương 3 trình bày về quản lý giao dịch và phục hồi cũng như các vấn đề về điều khiển cạnh tranh trong CSDL
TRƯỜNG ĐẠI HỌC CẦN THƠ KHOA CÔNG NGHỆ THÔNG TIN & TT GIÁO TRÌNH HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU TS NGUYỄN THÁI NGHE ThS TRẦN NGÂN BÌNH ThS ĐẶNG QUỐC VIỆT NĂM 2014 LỜI NÓI ĐẦU Hiện hầu hết hệ thống thông tin liên quan đến việc lưu trữ quản trị sở liệu Nắm bắt nhu cầu đó, giáo trình Hệ quản trị sở liệu (HQTCSDL) biên soạn với mong muốn mang lại nhìn tổng quan vấn đề lưu trữ, bảo mật truy vấn sở liệu Trong giáo trình này, sau phần lý thuyết HQTCSDL phần thực hành Các thực hành thiết kế theo buổi, có phần hướng dẫn bước phần tự làm để người đọc tự thực Những thực hành thiết kế hướng đến việc sử dụng HQTCSDL Oracle Quyển giáo trình cấu trúc thành hai phần gồm sáu chương phụ lục Trong phần giới thiệu lý thuyết HQTCSDL gồm có chương như: Chương trình bày khái niệm HQTCSDL vai trò nhà quản trị CSDL; Chương giới thiệu biện pháp bảo vệ CSDL đặc biệt vấn đề cấp quyền, lưu phục hồi toàn vẹn CSDL; Chương trình bày quản lý giao dịch phục hồi vấn đề điều khiển cạnh tranh CSDL Phần tập trung minh họa HQTCSDL cụ thể Oracle Trong đó, chương giới thiệu Oracle biện pháp bảo vệ CSDL Oracle Chương trình bày cách lập trình CSDL Oracle đặc biệt dùng PL/SQL Chương giới thiệu quản lý giao dịch, lưu phục hồi Oracle Sau phần phụ lục giới thiệu lỗi thường gặp, hàm xử lý liệu, kết nối CSDL Oracle từ ứng dụng Giáo trình biên soạn nhằm mục tiêu giảng dạy cho sinh viên đại học (các ngành hệ thống thơng tin, khoa học máy tính, cơng nghệ thơng tin,…) Trường Đại học Cần Thơ Mặc dù nhận nhiều góp ý quý báo đồng nghiệp, trình biên soạn chỉnh sửa giáo trình chắn khơng khỏi có thiếu sót Rất mong tiếp tục nhận góp ý, phản hồi từ bạn sinh viên, đồng nghiệp chuyên gia lĩnh vực CNTT&TT để giáo trình ngày hồn thiện Cần Thơ, ngày 15 tháng năm 2014 Nguyễn Thái Nghe Trần Ngân Bình Đặng Quốc Việt Trang ii MỤC LỤC LỜI NÓI ĐẦU i MỤC LỤC iii DANH MỤC HÌNH v DANH MỤC BẢNG vii DANH MỤC TỪ VIẾT TẮT viii TỔNG QUAN MÔN HỌC ix PHẦN I HỆ QUẢN TRỊ CSDL CHƯƠNG GIỚI THIỆU 1.1 Định nghĩa hệ quản trị CSDL 1.2 Chức hệ quản trị CSDL 1.3 Các thành phần HQTCSDL 1.4 Kiến trúc hệ CSDL đa người dùng 1.5 Nhà quản trị CSDL CÂU HỎI ÔN TẬP .8 CHƯƠNG CÁC BIỆN PHÁP BẢO VỆ CSDL 2.1 An toàn CSDL 2.2 Cấp quyền 2.3 Khung nhìn 11 2.4 Sao lưu phục hồi 13 2.5 Toàn vẹn liệu .14 2.6 Mật hoá liệu 14 2.7 RAID (Redundancy Array of Independent Disks) 15 CÂU HỎI ÔN TẬP 17 CHƯƠNG QUẢN LÝ GIAO DỊCH & PHỤC HỒI 18 3.1 Giao dịch (transaction) .18 3.2 Điều khiển cạnh tranh (Concurrency control) 21 3.3 Phục hồi CSDL 39 CÂU HỎI ÔN TẬP 44 PHẦN II HỆ QUẢN TRỊ CSDL ORACLE 45 CHƯƠNG ORACLE VÀ CÁC BIỆN PHÁP BẢO VỆ CSDL .46 4.1 Giới thiệu hệ quản trị CSDL Oracle 46 4.2 Các khái niệm cấu trúc lưu trữ CSDL Oracle .47 4.3 Mở/tắt CSDL thể (startup/shutdown) 56 4.4 Kết nối CSDL từ client 58 4.5 Bảng liệu đối tượng liên quan 59 4.6 Quản lý người dùng 66 4.7 Quản lý quyền Oracle .69 4.8 Quản lý vai trò (Role) 73 4.9 Import export 76 4.10 Oracle Data Pump 78 BÀI TẬP THỰC HÀNH 80 CHƯƠNG LẬP TRÌNH CSDL TRONG ORACLE 96 5.1 PL/SQL 96 5.2 Các loại mệnh đề 101 5.3 Các cấu trúc điều khiển 102 5.4 Kiểu trỏ (Cursor) .108 5.5 Thủ tục, hàm trigger 112 BÀI TẬP THỰC HÀNH – KHỐI VÔ DANH .118 BÀI TẬP THỰC HÀNH – HÀM, THỦ TỤC TRIGGER 126 CHƯƠNG QUẢN LÝ GIAO DỊCH TRONG ORACLE 134 6.1 Các mức độ độc lập 134 6.2 Cơ chế khóa Oracle 135 6.3 Sao lưu, phục hồi Oracle 138 BÀI TẬP THỰC HÀNH .145 ÔN TẬP 150 PHỤ LỤC 153 CÁC LỖI THƯỜNG GẶP 153 CÁC HÀM XỬ LÝ DỮ LIỆU 154 KẾT NỐI CSDL TỪ ỨNG DỤNG 155 TÀI LIỆU THAM KHẢO 161 Trang iv DANH MỤC HÌNH Hình Hệ sở liệu Hình Các thành phần HQTCSDL [Thomas 2005] Hình Các thành phần Bộ quản lý CSDL Hình Kiến trúc client-server tầng Hình Trách nhiệm DA, DBA SA Hình Tác dụng tùy chọn WITH LOCAL CHECK OPTION .12 Hình Các mức RAID 16 Hình Tổ chức lưu trữ trình thực giao dịch cập nhật CSDL 18 Hình Biểu đồ trạng thái tương ứng với GD .19 Hình 10 Các thành phần liên quan việc quản lý GD HQTCSDL 21 Hình 11 Các lịch trình .23 Hình 12 Đồ thị chờ có chu trình 33 Hình 13 Sự phân cấp độ mịn 38 Hình 14 Sự cố xảy GD thực cạnh tranh .40 Hình 15 Một thể CSDL 47 Hình 16 Quan hệ cấu trúc luận lý vật lý CSDL 48 Hình 17 Mối quan hệ Data block, extend Segment 50 Hình 18 Mối tương quan Tablespace Datafiles 51 Hình 19 Cấp phát thêm vùng lưu trữ cho CSDL 53 Hình 20 Quy trình mở/tắt CSDL Oracle 56 Hình 21 Role database 73 Hình 22 Oracle Net Manager .80 Hình 23 Đặt Net Service Name 81 Hình 24 Chọn giao thức mạng sử dụng 81 Hình 25 Các thiết lập giao thức .81 Hình 26 Thiết lập tên service .82 Hình 27 Kiểm tra kết nối .82 Hình 28 Thơng báo kết nối thành cơng .82 Hình 29 Giao diện SQL Developer .83 Hình 30 Kết nối trực tiếp .83 Hình 31 Kết nối thơng qua Oracle Net 84 Hình 32 Cửa sổ Oracle SQL Developer 84 Hình 33 Lỗi đăng nhập chưa có quyền kết nối đến CSDL .85 Hình 34 Cấu trúc khối PL/SQL 96 Hình 35 Hai dạng khối chương trình PL/SQL .97 Hình 36 Vị trí lưu trữ chương trình schema 112 Hình 37 Các kiện Trigger .116 Hình 38 Dùng biến 119 Hình 39 Cửa sổ nhập liệu .119 Hình 40 Các lựa chọn lưu toàn CSDL .140 Hình 41 Một chiến lược lưu tăng dần chênh lệch .141 Hình 42 Một chiến lược lưu tăng dần tích lũy 142 Hình 43 Nguyên lý lưu, hoàn lại phục hồi CSDL 144 Hình 44 Mơ hình kiến trúc JDBC tổng quát dành cho Oracle 156 Hình 45 Mơ hình JDBC Interfaces 156 Hình 46 Mơ hình làm việc Java Application với DBMS .156 Hình 47 Các bước sử dụng JDBC java 157 Hình 48 Tạo đối tượng NetBean 157 Hình 49 Cửa sổ tạo dự án 158 Hình 50 Cửa sổ tạo ứng dụng Java 158 Hình 51 Nạp thư viện .159 Hình 52 Chọn thư viện cần nạp 159 Hình 53 Tạo lớp kết nối 149 Hình 54 Tạo lớp Java 149 Hình 55 Tạo form Java 153 Hình 56 Palette chứa công cụ tạo form .153 Hình 57 Kết tạo form 154 Hình 58 Tạo form có bảng để thị liệu 158 Hình 59 Kết tạo form có bảng để thị liệu 159 Hình 60 Tạo mẩu report công cụ iReport 159 Hình 61 Kết tạo report công cụ iReport .160 Trang vi DANH MỤC BẢNG Bảng Lịch trình cạnh tranh .23 Bảng Lịch trình gây liệu cập nhật .24 Bảng Lịch trình phụ thuộc vào GD khơng hồn tất 25 Bảng Lịch trình phân tích khơng qn 25 Bảng Lịch trình khơng khả phục hồi 26 Bảng Giao thức 2PL giải vấn đề liệu cập nhật 29 Bảng Giao thức 2PL giải vấn đề phụ thuộc vào GD khơng hồn tất 30 Bảng Giao thức 2PL giải vấn đề phân tích khơng qn 30 Bảng Lịch trình cuộn nhiều tầng (cascade rollback) 31 Bảng 10 Tình trạng khóa chết 32 Bảng 11 Sự tương thích khóa chế khóa đa hạt 38 Bảng 12 Một đoạn tập tin nhật ký với GD diễn song song 41 Bảng 13 Các kiểu liệu Oracle .59 Bảng 14 Các mẫu biểu thức quy 64 Bảng 15 Một số quyền hệ thống thông dụng .69 Bảng 16 Một số quyền đối tượng thông dụng 71 Bảng 17 Các roles định nghĩa sẵn 75 Bảng 18 Thông tin roles 76 Bảng 19 Các tham số lệnh imp exp .77 Bảng 20 Các tham số tương đương imp/exp Oracle Data Pump 79 Bảng 21 Các ngoại lệ thường xảy 107 Bảng 22 Diễn giải thuộc tính trỏ 110 Bảng 23 Các mức cô lập theo chuẩn SQL92 .134 Bảng 24 Bảng tương thích khố 136 DANH MỤC TỪ VIẾT TẮT TỪ VIẾT TẮT Ý NGHĨA CSDL Cơ sở liệu GD Giao dịch HQTCSDL Hệ quản trị sở liệu PL/SQL Procedural Language extension of SQL (Ngôn ngữ thủ tục mở rộng SQL) RAID Redundancy Array of Independent Disks (Mảng đĩa độc lập dư thừa) RMAN Recovery MANager (Chương trình quản lý phục hồi) SCN System Change Number (Số đếm thay đổi hệ thống) SQL Structured Query Language (Ngơn ngữ truy vấn có cấu trúc) Trang viii TỔNG QUAN VỀ MÔN HỌC HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU Mục đích u cầu Giáo trình biên soạn nhằm mục đích phục vụ chủ yếu cho môn học Hệ quản trị sở liệu (HQTCSDL) sinh viên đại học thuộc khoa CNTT&TT trường Đại học Cần Thơ Đây môn học giúp sinh viên nắm kiến thức kỹ để quản trị CSDL quan hệ có phân quyền bảo mật Đồng thời, sinh viên có khả sử dụng ngơn ngữ lập trình để tương tác mạnh mẽ với CSDL thông qua việc thiết kế sử dụng thủ tục, hàm trigger Đa số hệ quản trị sử dụng phổ biến thị trường hỗ trợ tính trình bày giáo trình Để minh họa, phần mềm chọn để thực hành hệ quản trị CSDL Oracle 10g R2 Nội dung cốt lõi Tài liệu gồm chương lý thuyết thực hành Mỗi thực hành tập trung vào số nội dung với tập có hướng dẫn tập tự làm Đối với môn học 02 tín chỉ, sinh viên thực hành buổi (30 tiết) ứng với thực hành với chủ đề khác Sau hoàn tất học phần này, sinh viên có thể: • Kết nối, quản lý CSDL (tạo/xóa/khởi động/tắt CSDL) • Quản lý cấp quyền cho người dùng chép CSDL • Thực thao tác CSDL (tạo bảng, cài đặt ràng buộc bảng; thêm, sửa, xóa liệu) • Lập trình tạo hàm, thủ tục, trigger với ngơn ngữ PL/SQL • Hiểu điều khiển cạnh tranh giao dịch • Quản lý lưu, phục hồi • Hiểu cài đặt biện pháp bảo vệ hệ thống CSDL • Biết kết nối CSDL Oracle từ ứng dụng Java Kiến thức tiên Như môn bắt buộc, môn học đưa vào giảng dạy cho sinh viên thuộc ngành Tin Học với yêu cầu sinh viên hoàn thành học phần Hệ Cơ Sở Dữ Liệu (CT106) Phương pháp học tập Với mục tiêu nâng cao khả tự học tập tự nghiên cứu sinh viên, người soạn cố gắng lồng ghép vào nội dung ví dụ minh họa đơn giản, cụ thể; đồng thời bố trí bố cục với mong muốn tạo dễ hiểu cho sinh viên người đọc Để học tốt môn học này, trước hết sinh viên cần phải: • Tham gia đầy đủ buổi học lý thuyết lớp buổi thực hành phịng máy • Trước buổi thực hành, SV tự nghiên cứu làm phần tập có hướng dẫn nhà • Trong buổi thực hành, sinh viên thực phần tập khơng có hướng dẫn • Sinh viên cần lưu lại tất câu lệnh làm để sử dụng cho sau Một số quy ước Các ký hiệu trình bày cú pháp câu lệnh có ý nghĩa sau: CHỮ HOA từ khóa chữ thường từ người dùng định nghĩa, cần thay viết lệnh cụ thể {A | B} mục bắt buộc phải có, chọn A B [A] mục A không bắt buộc A mục A xuất nhiều lần ::= thay Các CSDL mẫu sử dụng giáo trình CSDL1: KTRUCSU(HOTEN_KTS, NAMS_KTS, PHAI, NOI_TN, DCHI_LL_KTS): Mỗi kiến trúc sư có họ tên, năm sinh, phái, nơi tốt nghiệp, địa liên lạc Giả sử khơng có hai kiến trúc sư trùng tên CHUTHAU(TEN_THAU, TEL, DCHI_THAU): Mỗi chủ thầu xây dựng cơng trình có tên thầu, số điện thoại địa Giả sử khơng có hai chủ thầu trùng tên CHUNHAN(TEN_CHU, DCHI_CHU): Mỗi chủ nhân công trình có tên chủ nhân địa Giả sử khơng có hai chủ nhân trùng tên CONGNHAN(HOTEN_CN, NAMS_CN, NAM_VAO_N, CH_MON): Mỗi công nhân tham gia xây dựng cơng trình có họ tên, năm sinh, năm vào nghề, chuyên mơn Giả sử khơng có hai cơng nhân trùng họ tên CGTRINH(STT_CTR, TEN_CTR, DCHI_CTR, TINH_THANH, KINH_PHI, TEN_CHU, TEN_THAU, NGAY_BD): Mỗi cơng trình có số thứ tự, tên cơng trình, địa chỉ, thuộc tỉnh thành đó, xây dựng với kinh phí (đơn vị tính triệu đồng), thuộc sở hữu chủ nhân, chủ thầu xây dựng, khởi công xây từ ngày THAMGIA(HOTEN_CN, STT_CTR, NGAY_TGIA, SO_NGAY): Một cơng nhân tham gia xây dựng nhiều cơng trình, cơng trình có nhiều cơng nhân tham gia Khi cơng nhân tham gia vào cơng trình ghi nhận lại ngày bắt đầu tham gia số ngày tham gia THIETKE(HOTEN_KTS, STT_CTR, THU_LAO): Một kiến trúc sư thiết kế nhiều cơng trình, cơng trình nhiều kiến trúc sư thiết kế Khi kiến trúc sư thiết kế cơng trình có thù lao tương ứng CSDL2: BAIBAO(STT_BAI, TUA, MA_THLOAI): Mỗi báo đánh số thứ tự phân biệt, có tựa cho biết thuộc thể loại BAO_TCHI(MA_BAO_TC, TEN, DCHI_TS, TEL, DINH_KY): Mỗi tờ báo tạp chí có mã riêng biệt, có tên, địa soạn, số điện thoại, xuất theo định kỳ Trang x Hình 49 Cửa sổ tạo dự án Nhấn Next cửa sổ New Java Application xuất (ta vào mục Project Name để đổi tên đối tượng Project Location để chọn nơi cần lưu) Hình 50 Cửa sổ tạo ứng dụng Java Tạo đối tượng với tên Java_Connect_Oracle Tiếp theo nhấn Finish kết thúc đối tượng tạo Đăng Kí Driver Khi tạo xong đối tượng việc để kết nối csdl Oracle Java ta sử dụng cơng cụ để lập trình java NetBeans Eclipse bước quan trọng Trang 158 khơng thể thiếu ta cần phải đăng kí driver để kết nối với Sau bước để đăng kí driver: Bước 1: Thêm thư viện JDBC driver Oracle vào ứng dụng Java • Thư viện JDBC driver Oracle là: ojdbc14.jar (có thể download trang: http://www.oracle.com) • Để nạp thư viện cách nhấn chuột phải vào đối tượng cần nạp chọn Libraries đối tượng chọn Add JAR/Folder…Sau chọn đến nơi lưu thư viện cần nap Hình 51 Nạp thư viện Hình 52 Chọn thư viện cần nạp Bước 2: Đăng kí Driver – Oracle - Cách 1: Dùng phương thức forName() lớp java.lang.Class Cấu trúc lệnh: Class.forName("oracle.jdbc.driver.OracleDriver"); - Cách 2: Dùng phương thức registerDriver() lớp DriverManager Cấu trúc lệnh: Driver driver = new oracle.jdbc.driver.OracleDriver(); DriverManager.registerDriver(driver); Tạo kết nối Bước 1: Tạo lớp kết nối Để thiết lập kết nối trươc tiên ta tạo lớp kết nối, để tạo lớp kết nối ta làm sau: Nhấn chuột phải vào package đối tượng muốn tạo lớp kết nối chọn New -> Java Class… Trang 159 Hình 53 Tạo lớp kết nối Tiếp theo cửa sổ New Java Class xuất ta đổi tên class mục Class Name Nhấn Finish để hồn tất việc tạo Hình 54 Tạo lớp Java Bước 2: Viết hàm để thiết lập kết nối Khi có lớp kết nối ta tiến hành viết hàm để kết nối tương tác với CSDL Oracl ta cần viết hàm sau: • Viết hàm tạo kết nối getConnection lớp DriverManager Cấu trúc lệnh sau: DriverManager.getConnection(url,“UserName", “Pasword"); Với trình điều khiển Oracle ta có: String url = “jdbc:oracle:thin:@ serverName: port:SID”; (Cổng kết nối với CSDL Oracle port mặc định:1521, serverName thường localhost, SID tên CSDL ) hay String url = “jdbc:oracle:oc18:@ serverName”; UserName: Tên người dùng đăng nhập vào CSDL Oracle Trang 149 Pasword: Mật người dùng đăng nhập vào CSDL Oracle • Viết hàm tạo đối tượng Statement: Để tạo đối tượng Statement cách gọi phương thức createStatement() đối tượng Connection tạo trước • Viết hàm thực thi câu lệnh SQL: Sau tạo đối tượng Statement thành cơng, ta thực thi truy vấn SQL từ chương trình Java cách sử dụng phương thức executeQuery (), executeQuery() Kết trình thực thi lưu trữ vào đối tượng ResultSet, bạn cần phải khai báo đối tượng ResultSet • Viết hàm đóng kết nối: Dùng hàm close() để đóng kết nối Đọan code ví dụ chi tiết lớp kết nối: package connect_java_oracle; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.sql.*; public class Connect_java_oracle { // Khai báo biến String Host = ""; // thông tin host DataBase Server int Port =1521; // thông tin port DataBase Server String DataBase = "";//thông tin host DataBase Server String UserName = "";//thông tin tên đăng nhập DB Server String Password = "";// thông tin tên mật DB Server Connection connect=null; //khởi tạo Connection null ResultSet result = null; //Khởi tạo ResultSet chứa kquả Statement statement = null;//Khởi tạo Statement thực thi // Hàm khởi tạo public Connect_java_oracle(String Host,int Port,String DataBase, String UserName, String Password ) { this.Host = Host; this.Port=Port; this.DataBase=DataBase; this.UserName= UserName; this.Password=Password; } // Hàm kiểm tra Driver public void Testdriver(){ try { Class.forName("oracle.jdbc.OracleDriver"); Trang 150 //Kiểm tra khơng tìm thấy Driver ném lổi! System.out.println("Tim thay driver!"); } catch (ClassNotFoundException ex) { System.out.println("Khong tim thay driver!"); }} // Hàm lấy Connection public Connection getConnect()throws Exception{ // Nếu connetion null khởi tạo if(this.connect==null){ // Gọi hàm kiểm tra Driver Testdriver(); // Tạo Url kết nối đền DataBase sever String url = "jdbc:oracle:thin:@" + this.Host + ":"+this.Port+":" + this.DataBase; try { // Tạo Connection thông qua Url this.connect = DriverManager.getConnection (url,this.UserName,this.Password); System.out.println("Ket noi cong!"); } // Nếu không thành cơng ném lỗi ngồi catch (java.sql.SQLException e) { throw new Exception("Không thể kết nối đến DataBase: " + e.getMessage()); }} // Trả connection return this.connect; } // Tao statement để thực thi câu Query public Statement getStatement() throws Exception{ if(this.statement==null? true: this.statement.isClosed()){ this.statement= this.getConnect().createStatement(); } return this.statement; } // Thưc thi câu lệnh select lấy liệu từ CSDL public ResultSet excuteQuery(String query) throws SQLException, Exception{ try { // Thực thi this.result = this.getStatement().executeQuery(query); } // Nếu không thành công thông báo lỗi catch (java.sql.SQLException e) { Trang 151 throw new Exception("Không thể excuteQuery: " + e.getMessage()); } return this.result; } // Thực thi câu lệnh insert, update, delete public int excuteUpdate(String query) throws Exception{ // khai báo biến lưu trữ kết int kq = Integer.MIN_VALUE; try{ // Thực thi kq=this.getStatement().executeUpdate(query); // Nếu không thành công thông báo lỗi }catch (java.sql.SQLException e) { throw new Exception("Không thể excuteUpdate: " + e.getMessage()); } finally{ this.Close() ;} return kq; } // Hàm đóng kết nối public void Close() throws SQLException{ //Nếu result chưa đóng Đóng result! if(this.result!=null && !this.result.isClosed()){ this.result.close(); this.result=null; } //Nếu statement chưa đóng Đóng statement! if(this.statement!=null && !this.statement.isClosed()){ this.statement.close(); this.statement=null; } //Nếu connect chưa đóng Đóng connection! if(this.connect!=null && !this.connect.isClosed()){ this.connect.close(); this.connect=null; } } } //đóng lớp Trang 152 Xữ lý liệu Để tạo form java ta nhấp chuột phải vào package đối tượng chọn New sau chọn form Frame Form Dailog Form… muốn tạo Hình 55 Tạo form Java Khi form tạo ta tạo control để tương tác với CSDL Ví dụ: Ta có CSDL Oracle orcl với tài khoản có sẳn tên đăng nhập SCOTT mật SCOTT có bảng EMP(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) CSDL ta thiết kế form thông qua công cụ Palette hoăc lập trinh code Hình 56 Palette chứa cơng cụ tạo form Ta có form sau: Trang 153 Hình 57 Kết tạo form Lưu ý: tên TextField đặt theo tên bạn muốn, nhiên để dễ nhớ nên theo qui tắc ký tự đầu mô tả kiểu trường sau TextField TextField TextField TextField TextField TextField TextField TextField EMPNO: txtEMPNO ENAME: txtENAME JOB: txtJOB MGR: txtMGR HIREDATE: txtHIREDATE SAL: txtSAL COMM: txtCOMM DEPTNO:txtDEPTNO Gọi Hàm Connection (truyền vào chuổi kết nối tương ứng) Gọi lại hàm kết nối để kết nối tới CSDL chuyền giá trị để kết nối tạo sẳn trước (xem phần code giới thiệu phần kết nối) Connect_java_oracle connect = new Connect_java_oracle("localhost",1521,"orcl","SCOTT","SCOTT"); Thêm Dữ Liệu Khi giao diện chạy lên ta nhập liệu nhấn nút thêm để thêm vào CSDL Chi tiết code thêm liệu: • Khai báo biến int empno; String ename; String job; int mgr; Date hiredate; int sal; int comm; int deptno; // // // // // // // // chứa chứa chứa chứa chứa chứa chứa chứa giá giá giá giá giá giá giá giá trị trị trị trị trị trị trị trị lấy lấy lấy lấy lấy lấy lấy lấy từ từ từ từ từ từ từ từ textfielf textfielf textfielf textfielf textfielf textfielf textfielf textfielf EMPNO ENAME JOB MGR HIRE SAL COMM DEPTNO • Tạo Hàm Tạo hàm form có tên Them() để thêm giá trị vào bảng EMP public void Them() throws SQLException, Exception{ Trang 154 // Lấy giá trị từ TextField gán vào biến tương ứng ép kiểu tương ứng CSDL empno =Integer.parseInt(txtEMPNO.getText()); ename=txtENAME.getText(); job=txtJOB.getText(); mgr=Integer.parseInt(txtMGR.getText()); hiredate=(Date) formatter.parse(txtHIREDATE.getText().toString()); sal=Integer.parseInt(txtSAL.getText()); comm=Integer.parseInt(txtCOMM.getText()); deptno=Integer.parseInt(txtDEPTNO.getText()); try{ //Tạo câu lênh sql thêm String sql="INSERT INTO EMP(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) "+ "VALUES("+empno+",'"+ename+"','"+job+"',"+mgr+"," +hiredate+","+sal+","+comm+","+deptno+")"; //thực thi câu lệnh SQL thông qua gọi hàm excuteUpdate() lơp tạo kết nối connect.excuteUpdate(sql); System.out.print("Thêm thành công"); }catch(Exception ex){ System.out.print("Thêm thất bại"); } } • Gọi lại hàm để thực thi (trong ví dụ form ta dùng button để gọi lại hàm thức thi hàm thêm ) // kiện button thêm để thêm vào CSDL private void btnThemActionPerformed (java.awt.event.ActionEvent evt) { try { // Gọi lại hàm Them() tạo Them(); } catch (Exception ex) { Logger.getLogger(FmThemSV.class.getName()).log(Level SEVERE, null, ex); }} Sửa Dữ Liệu Tương tự code thêm liệu, code ta cần chuyền vào mã liệu dòng bảng cần sửa EMPNO giá trị lại bảng EMP cần sửa thực nhấn nút sửa để sửa liệu Chi tiết code Sửa liệu: Tạo hàm form có tên Sua() để sửa giá trị bảng EMP Trang 155 public void Sua() throws SQLException, Exception{ // Việc lấy mã dòng cần sửa giá trị sửa tương ứng từ TextField gán vào biến tương ứng ép kiểu khơng khác so với ví dụ thêm giới thiệu phần empno =Integer.parseInt(txtEMPNO.getText()); ename=txtENAME.getText(); job=txtJOB.getText(); mgr=Integer.parseInt(txtMGR.getText()); hiredate=(Date) formatter.parse (txtHIREDATE.getText().toString()); sal=Integer.parseInt(txtSAL.getText()); comm=Integer.parseInt(txtCOMM.getText()); deptno=Integer.parseInt(txtDEPTNO.getText()); try{ //Tạo câu lênh sql sửa String sql="UPDATE EMP SET ENAME='"+ename+"',JOB='"+job+"',MGR="+mgr+"," + "HIREDATE="+hiredate+",SAL="+sal+",COMM="+comm+",DE PTNO"+deptno+" WHERE EMPNO="+empno; //thực thi câu lệnh SQL thông qua gọi hàm excuteUpdate() lơp tạo kết nối connect.excuteUpdate(sql); System.out.print("Sửa thành công"); }catch(Exception ex){ System.out.print("Sửa thất bại"); }} Gọi Lại Hàm (tương tự kiện ví dụ thêm) // kiện button sửa để sửa cần sửa truyền vào private void btnXoaActionPerformed (java.awt.event.ActionEvent evt) { try { // Gọi lại hàm Sua() tạo Sua(); } catch (Exception ex) { Logger.getLogger(FmThemSV.class.getName()).log (Level.SEVERE, null, ex); } } Xóa Dữ Liệu Phần xóa tương đối dễ dàng câu lệnh sql đơn giản so với phần ví dụ thêm sửa Nhưng thao tác lập trình code dẫn giống hai phần ta việc truyền vào mã dịng cần xóa EMPNO bảng EMP Chi tiết đoạn code Xóa • Tạo Hàm Xóa Trang 156 Như ta thấy phần ví dụ xóa bên dượ khơng khác so với phần ví dụn thêm xóa giới thiệu public void Xoa() throws SQLException, Exception{ // Lấy mã giá trị dòng cần xóa từ TextField gán vào biến tương ứng empno =Integer.parseInt(txtEMPNO.getText()); try{ //Tạo câu lệnh sql xóa String sql="DELETE FROM EMP WHERE ENAME="+ename; //thực thi câu lệnh SQL thông qua gọi hàm excuteUpdate() lơp tạo kết nối connect.excuteUpdate(sql); System.out.print("Xóa thành cơng"); }catch(Exception ex){ System.out.print("Xóa thất bại"); }} • Gọi Lại Hàm (tương tự kiện ví dụ thêm) // kiện button sửa để sửa cần sửa truyền vào private void btnXoaActionPerformed (java.awt.event.ActionEvent evt) { try { // Gọi lại hàm Sua() tạo Sua(); } catch (Exception ex) { Logger.getLogger (FmThemSV.class.getName()).log(Level.SEVERE, null, ex); } } In Dữ Liệu Ra Form Trong phần ta giới thiệu in liệu form dạng • Tao form có bảng để thị liệu Ta dùng cơng cụ Palette để tạo form hay code đề cập Ta có form ví dụ sau: Trang 157 Hình 58 Tạo form có bảng để thị liệu • Tạo Hàm Hiển Thị liệu Code hiển thị liệu đơn giản giống truy vấn liệu từ bảng bình thường có khác ta lấy liệu từ CSDL đưa vào cột dòng bảng thương ứng form Ta có chi tiết đoan code sau: public void Hienthi() throws Exception{ //Tạo câu sql truy vấn lấy liệu String sql="SELECT * FROM EMP"; //thực thi câu truy vấn ResultSet rs=connect.excuteQuery(sql); int i=0; // Lấy dòng cột CSDL đưa vào cột dòng tương ứng form while(rs.next()){ TableEMP.setValueAt(rs.getInt(1),i, 0); TableEMP.setValueAt(rs.getString(2),i, 1); TableEMP.setValueAt(rs.getString(3),i, 2); TableEMP.setValueAt(rs.getInt(4),i, 3); TableEMP.setValueAt(rs.getDate(5),i, 4); TableEMP.setValueAt(rs.getInt(6),i, 5); TableEMP.setValueAt(rs.getInt(7),i, 6); TableEMP.setValueAt(rs.getInt(8),i, 7); i++;} } • Gọi Hàm Để Hiển Thị Dữ Liệu Việc gọi hàm ta sử dụng button hiển thị hình minh họa Ta có code sau: private void btnHienthiActionPerformed(java.awt.event.ActionEvent evt) { try { //Gọi hàm Hienthi() Hienthi(); } catch (Exception ex) { Logger.getLogger (FmHienthi.class.getName()).log (Level.SEVERE, null, ex); } } Kết sau gọi hàm ta có form dạng bảng tạo trước hình sau: Trang 158 Hình 59 Kết tạo form có bảng để thị liệu • In Dữ Liệu Ra Report Có nhiều cơng cụ để giúp hỗ trợ việc in dễ dang cho người lập trình ví dụ phần mềm iReport Sau với phiệu phần in report với trợ giúp công cụ iReport Trong phần ta không hướng dẫn tạo mẩu report công cụ iReport giới thiệu phần code java xuất report Bước 1: Tạo mẩu report cơng cụ iReport Ví dụ cơng cụ iReport ta tạo mẫu report có tên reportEMP sau: Hình 60 Tạo mẩu report cơng cụ iReport Bước 2: Tạo hàm code Java xuất report public void Inreport() throws JRException, Exception{ // reportEMp.jrxml (được tạo với reportEMp jasper)là file report tạo bước JasperDesign jasperDesign = JRXmlLoader.load ("reportEMp.jrxml"); Trang 159 net.sf.jasperreports.engine.JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign); Map parameters = new HashMap(); JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, connect.getConnect()); JasperViewer.viewReport(jasperPrint); } Bước 3: Gọi lại hàm in report Trong form ví dụ ta dung kiên button in để in report Ta có đoạn code sau: private void btnInActionPerformed (java.awt.event.ActionEvent evt) { try { Inreport(); } catch (Exception ex) { Logger.getLogger (FmHienthi.class.getName()).log (Level.SEVERE, null, ex);} } Ta đươc kết sau gọi hàm Inreport(): Hình 61 Kết tạo report công cụ iReport Trang 160 TÀI LIỆU THAM KHẢO Christopher Allen Oracle Database 10g PL/SQL, Oracle Press, 2004 Craig S Mullins Database Administration – The complete guide to practices and procedures, Addison Wesley, 2002 Gavin Powel and Carol McCullogh-Dieter Oracle SQL JumpStart with Example, Elsevier, 2005 Thomas Connolly and Carolyn Begg Database Systems – A practical approach to design, implementation, and Management, Addison Wesley, 4th edition, 2005 Các websites tham khảo (đã truy xuất thời điểm 12/2013): • http://www.techonthenet.com/oracle/functions/index.php • http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_reg exp.htm • http://plsql-tutorial.com/plsql-exception-handling.htm • http://www.tutorialized.com/view/tutorial/ Trang 161 ... trữ quản trị sở liệu Nắm bắt nhu cầu đó, giáo trình Hệ quản trị sở liệu (HQTCSDL) biên soạn với mong muốn mang lại nhìn tổng quan vấn đề lưu trữ, bảo mật truy vấn sở liệu Trong giáo trình này,... THAMGIA(HOTEN_CN, STT_CTR, NGAY_TGIA, SO_NGAY): Một cơng nhân tham gia xây dựng nhiều cơng trình, cơng trình có nhiều cơng nhân tham gia Khi công nhân tham gia vào cơng trình ghi nhận lại ngày bắt đầu tham... vào danh mục chứa thông tin mô tả liệu lưu CSDL gọi danh mục hệ thống (system catalog) hay gọi tự điển liệu (data dictionary) Dữ liệu gọi siêu liệu hay liệu liệu (metadata), tùy theo HQTCSDL