Chuẩn bị cho kỳ thi 733 về Phát triển ứng dụng DB2 9, Phần 4: Lập trình SQL nhúng Xây dựng các ứng dụng có tương tác với DB2 potx

73 366 0
Chuẩn bị cho kỳ thi 733 về Phát triển ứng dụng DB2 9, Phần 4: Lập trình SQL nhúng Xây dựng các ứng dụng có tương tác với DB2 potx

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chuẩn bị cho kỳ thi 733 về Phát triển ứng dụng DB2 9, Phần 4: Lập trình SQL nhúng Xây dựng các ứng dụng có tương tác với DB2 Roger Sanders, Quản lý cao cấp, EMC Tóm tắt: Hướng dẫn này giới thiệu cho bạn về lập trình SQL nhúng và dẫn bạn qua từng bước làm thế nào để xây dựng một ứng dụng SQL nhúng. Hướng dẫn này giới thiệu quá trình để chuyển đổi một hoặc nhiều tệp tin mã nguồn của ngôn ngữ lập trình bậc cao có chứa SQL nhúng thành một ứng dụng có thể chạy được. Đây là bài viết thứ tư trong một loạt gồm chín hướng dẫn được thiết kế để giúp bạn chuẩn bị cho kỳ thi lấy chứng chỉ Nhà phát triển ứng dụng DB2 (kỳ thi 733). Trước khi bạn bắt đầu Về hướng dẫn này Hướng dẫn này giới thiệu cho bạn về lập trình SQL nhúng và dẫn bạn qua từng bước cơ bản làm thế nào để xây dựng một ứng dụng SQL nhúng. Hướng dẫn này cũng giới thiệu cho bạn về việc chuyển đổi một hoặc nhiều tệp tin mã nguồn của ngôn ngữ lập trình bậc cao có chứa SQL nhúng thành một ứng dụng có thể chạy được. Trong hướng dẫn này, bạn sẽ tìm hiểu về:  Các câu lệnh SQL được nhúng vào một tệp tin mã nguồn của ngôn ngữ lập trình bậc cao như thế nào.  Các bước liên quan đến việc phát triển một ứng dụng SQL nhúng.  Các biến chủ là gì, chúng được tạo ra như thế nào và chúng được sử dụng như thế nào.  Các biến chỉ thị (indicator) là gì, chúng được tạo ra như thế nào và chúng được sử dụng khi nào.  Làm thế nào để phân tích các nội dung của một biến cấu trúc dữ liệu của một SQL Communications Area (SQLCA -Vùng trao đổi thông tin SQL).  Làm thế nào để thiết lập một kết nối cơ sở dữ liệu từ một ứng dụng SQL nhúng.  Làm thế nào để nắm bắt và xử lý các lỗi khi chúng xuất hiện.  Làm thế nào để chuyển đổi các tệp tin mã nguồn có chứa các SQL nhúng thành một ứng dụng có thể chạy được. Đây là bài viết thứ tư trong một loạt gồm chín hướng dẫn được thiết kế để giúp bạn chuẩn bị cho kỳ thi lấy chứng chỉ Nhà phát triển ứng dụng DB2® (kỳ thi 733). Các tư liệu trong hướng dẫn này bao gồm các mục tiêu trong Phần 4 của kỳ thi, mang tên "Lập trình SQL nhúng". Bạn không cần phải dùng một bản sao của DB2 Universal Database (Cơ sở dữ liệu đa năng DB2) để hoàn thành hướng dẫn này. Tuy nhiên, bạn có thể tải về một phiên bản dùng thử miễn phí IBM DB2 Universal Database Enterprise Edition (Cơ sở dữ liệu phổ quát DB2 của IBM, Ấn bản doanh nghiệp) và một bản sao miễn phí của DB2 Express-C 9 từ trang tải về DB2 Express-C. Các mục tiêu Sau khi hoàn thành hướng dẫn này, bạn sẽ có thể:  Thiết lập một kết nối cơ sở dữ liệu trong một ứng dụng SQL nhúng.  Thi hành các câu lệnh SQL trong một ứng dụng SQL nhúng.  Phân tích các kết quả và xử lý các lỗi thường gặp khi thi hành các câu lệnh SQL trong một ứng dụng SQL nhúng. Các điều kiện cần trước Để hiểu một số tư liệu được trình bày trong hướng dẫn này, bạn cần phải quen thuộc với những thuật ngữ sau đây:  Đối tượng: Là mọi thứ trong một cơ sở dữ liệu có thể được tạo ra hoặc được thao tác với SQL (ví dụ như các bảng, các khung nhìn, các chỉ mục và các gói).  Bảng: Là một cấu trúc logic được sử dụng để trình bày dữ liệu như là một tập hợp các hàng không theo thứ tự với một số các cột cố định. Mỗi cột có chứa một bộ các giá trị, mỗi giá trị của cùng một kiểu dữ liệu (hoặc một kiểu con của kiểu dữ liệu cột); các định nghĩa về các cột tạo thành cấu trúc bảng và các hàng chứa các dữ liệu bảng thực tế.  Trình tối ưu hóa DB2: Là một thành phần của trình tiền biên dịch (precompiler) SQL chọn một kế hoạch truy cập cho một câu lệnh SQL của Ngôn ngữ thao tác dữ liệu (DML - Data Manipulation Language) bằng cách mô hình hóa chi phí thi hành của một số các kế hoạch truy cập thay thế được cho nhau và lựa chọn kế hoạch có chi phí ước tính thấp nhất. Giới thiệu về lập trình SQL nhúng SQL và SQL nhúng Ngôn ngữ truy vấn có cấu trúc hay SQL (Structured Query Language) là một ngôn ngữ được tiêu chuẩn hóa để thao tác với các đối tượng cơ sở dữ liệu và dữ liệu chứa trong chúng. SQL bao gồm một số các câu lệnh khác nhau, được sử dụng để định nghĩa, thay đổi và hủy bỏ các đối tượng cơ sở dữ liệu và để chèn, sửa đổi, xóa và lấy ra các giá trị dữ liệu. Nhưng vì SQL về bản chất là không có tính thủ tục, nên SQL không phải là một ngôn ngữ lập trình mục đích chung. (Các câu lệnh SQL được thực hiện bởi trình quản lý cơ sở dữ liệu DB2 (DB2 Database Manager), chứ không phải bởi hệ điều hành). Do vậy, các ứng dụng cơ sở dữ liệu thường được phát triển bằng cách kết hợp quyết định và kiểm soát tuần tự của một ngôn ngữ lập trình bậc cao với các khả năng lưu trữ, thao tác và lấy ra các dữ liệu của SQL. Một số phương pháp có sẵn để kết hợp SQL với một ngôn ngữ lập trình bậc cao, nhưng cách tiếp cận đơn giản nhất là nhúng các câu lệnh SQL trực tiếp vào các tệp tin mã nguồn của ngôn ngữ lập trình bậc cao đã được sử dụng để tạo ra ứng dụng. Kỹ thuật này được gọi là lập trình SQL nhúng. Một trong những mặt hạn chế khi phát triển các ứng dụng bằng cách dùng SQL nhúng là ở chỗ các trình biên dịch (compiler) của ngôn ngữ lập trình bậc cao không nhận ra và do đó không thể diễn giải được, các câu lệnh SQL được nhúng trong một tệp tin mã nguồn. Do đó, các tệp tin mã nguồn có chứa các câu lệnh SQL nhúng phải được xử lý trước (bằng một quá trình được gọi là tiền biên dịch) trước khi chúng có thể được biên dịch và được liên kết để tạo ra một ứng dụng có thể chạy được. Để tạo điều kiện thuận lợi cho việc tiền xử lý này, mỗi câu lệnh SQL nhúng trong một tệp tin mã nguồn của ngôn ngữ lập trình bậc cao phải được gắn thêm các tiếp đầu ngữ với các từ khóa EXEC SQL và kết thúc bằng hoặc một dấu chấm phẩy (trong C/C++) hoặc bằng từ khóa END-EXEC (trong COBOL). Một công cụ đặc biệt, gọi là trình tiền biên dịch SQL thực hiện việc tiền xử lý; khi trình tiền biên dịch SQL bắt gặp từ khóa EXEC SQL, nó sẽ thay thế đoạn văn bản tiếp theo (cho đến khi nó tìm thấy một dấu chấm phẩy (;) hoặc từ khóa END- EXEC) bằng một lời gọi hàm đặc thù của DB2 để chuyển tiếp câu lệnh SQL đã bắt gặp đến Trình quản lý cơ sở dữ liệu DB2 để xử lý. Một cách tương tự, Trình quản lý cơ sở dữ liệu DB2 không thể làm việc trực tiếp với các biến của ngôn ngữ lập trình bậc cao. Thay vào đó, nó phải sử dụng các biến đặc biệt được gọi là các biến chủ (host variables) để di chuyển dữ liệu giữa một ứng dụng và một cơ sở dữ liệu. (Bạn có thể xem xét kỹ hơn về các biến chủ trong phần dưới đây mang tên "Khai báo các biến chủ" (Declaring host variables")). Các biến chủ trông giống như bất kỳ biến nào của ngôn ngữ lập trình bậc cao; vì vậy, để tách riêng chúng ra, chúng phải được định nghĩa trong một phần đặc biệt được gọi là phần khai báo. Ngoài ra, để cho trình tiền biên dịch SQL phân biệt các biến chủ với văn bản khác trong một câu lệnh SQL, tất cả các tham chiếu tới các biến chủ phải được đặt sau một dấu hai chấm (:). SQL tĩnh Một câu lệnh SQL tĩnh là một câu lệnh SQL có thể được mã hóa cứng trong một chương trình ứng dụng trong thời gian phát triển vì các thông tin về cấu trúc và các đối tượng (ví dụ như các bảng, cột và các kiểu dữ liệu) mà nó sẽ tương tác với chúng đã được biết trước. Do các chi tiết về một câu lệnh SQL tĩnh được biết rõ trong thời gian phát triển, công việc phân tích câu lệnh và lựa chọn kế hoạch truy cập dữ liệu tối ưu cho việc thi hành câu lệnh được trình tối ưu hóa DB2 thực hiện như là một phần của quá trình phát triển. Bởi vì dạng hoạt động của chúng được lưu trữ trong cơ sở dữ liệu (như là một gói) và không phải được tạo ra trong thời gian chạy ứng dụng, các câu lệnh SQL tĩnh thi hành một cách nhanh chóng. Mặt kém của cách tiếp cận này là tất cả các câu lệnh SQL tĩnh phải được chuẩn bị (nói cách khác, các kế hoạch truy cập của chúng phải được tạo ra và được lưu trữ trong cơ sở dữ liệu) trước khi chúng có thể được thi hành. Hơn nữa, các câu lệnh SQL tĩnh không thể bị thay đổi trong thời gian chạy và mỗi ứng dụng có sử dụng SQL tĩnh phải kết buộc các gói hoạt động của nó với mọi cơ sở dữ liệu mà ứng dụng sẽ tương tác. Ngoài ra, bởi vì các ứng dụng SQL tĩnh đòi hỏi biết trước về các đối tượng cơ sở dữ liệu, các thay đổi được thực hiện cho những đối tượng đó sau khi một ứng dụng đã được phát triển có thể sinh ra các kết quả không mong muốn. Sau đây là những ví dụ về các câu lệnh SQL tĩnh: SELECT COUNT(*) FROM employee UPDATE employee SET lastname = 'Jones' WHERE empid = '001' SELECT MAX(salary), MIN(salary) INTO :MaxSalary, :MinSalary FROM employee Nói chung, các câu lệnh SQL tĩnh rất phù hợp với các ứng dụng hiệu năng cao, thi hành các hoạt động định sẵn đối với một tập hợp các đối tượng cơ sở dữ liệu đã biết. SQL động Mặc dù các câu lệnh SQL tĩnh tương đối dễ dàng để kết hợp vào một ứng dụng, việc sử dụng của chúng có một chút bị hạn chế do khuôn dạng của chúng phải được biết trước. Các câu lệnh SQL động, mặt khác, linh hoạt hơn nhiều, vì chúng có thể được xây dựng trong thời gian chạy ứng dụng; thông tin về cấu trúc của câu lệnh SQL động và các đối tượng mà nó có kế hoạch tương tác với các đối tượng đó không cần phải được biết trước. Hơn nữa, các câu lệnh SQL động không có một định dạng được mã hóa trước, cố định, các đối tượng dữ liệu mà chúng tham khảo có thể thay đổi mà không ảnh hưởng đến câu lệnh (với điều kiện rằng các đối tượng được câu lệnh này tham chiếu không bị xóa đi). Mặc dù, các câu lệnh động SQL nói chung là linh hoạt hơn các câu lệnh tĩnh SQL, chúng thường sẽ phức tạp hơn để kết hợp vào một ứng dụng. Và do công việc phân tích câu lệnh để lựa chọn một kế hoạch truy cập tốt nhất được thực hiện trong thời gian chạy ứng dụng (một lần nữa, bằng trình tối ưu hóa của DB2), câu lệnh SQL động có thể mất nhiều thời gian hơn để thi hành cùng một việc so với SQL tĩnh tương đương. (Bởi vì các câu lệnh SQL động có thể tận dụng các thống kê cơ sở dữ liệu có sẵn trong thời gian chạy ứng dụng, có một số trường hợp trong đó câu lệnh SQL động chạy nhanh hơn so với một câu lệnh SQL tĩnh tương đương, nhưng điều đó là ngoại lệ và không phải là tiêu chuẩn). Sau đây là những ví dụ về câu lệnh SQL động: SELECT COUNT(*) FROM ? INSERT INTO EMPLOYEES VALUES (?, ?) DELETE FROM DEPARTMENT WHERE DEPTID = ? Nói chung, các câu lệnh SQL động thích hợp cho các ứng dụng có tương tác với một cơ sở dữ liệu thay đổi nhanh chóng hoặc cho phép những người sử dụng định nghĩa và thực hiện các truy vấn không theo thể thức (ad hoc). Xây dựng một ứng dụng SQL nhúng Khai báo các biến chủ Trước đó, chúng ta thấy rằng Trình quản lý cơ sở dữ liệu DB2 dựa vào các biến chủ để di chuyển dữ liệu giữa một ứng dụng và một cơ sở dữ liệu. Chúng ta cũng thấy rằng các biến chủ được định nghĩa trong một phần đặc biệt được gọi là phần khai báo và đó là những gì phân biệt chúng với các biến khác của ngôn ngữ lập trình bậc cao. Vậy thì các phần khai báo được viết như thế nào? Bắt đầu của một phần khai báo được định nghĩa bởi câu lệnh BEGIN DECLARE SECTION, còn kết thúc phần khai báo được định nghĩa bởi câu lệnh END DECLARE SECTION. Vì vậy, một phần khai báo tiêu biểu trong một tệp tin mã nguồn C/C++ trông giống như: // Define The SQL Host Variables Needed EXEC SQL BEGIN DECLARE SECTION; char EmployeeID[7]; char WorkDept[4]; char Job[9]; char Sex[2]; double Salary; double Bonus; double Commision; EXEC SQL END DECLARE SECTION; Một phần khai báo có thể được viết mã bất cứ ở đâu mà các khai báo biến ngôn ngữ lập trình bậc cao có thể được viết trong một tệp tin mã nguồn. Và mặc dù một tệp tin mã nguồn thường chỉ chứa một phần khai báo, nhưng có thể cho phép nhiều phần khai báo. Các biến chủ để chuyển dữ liệu vào một cơ sở dữ liệu được gọi là các biến chủ đầu vào, trong khi các biến chủ để nhận dữ liệu từ một cơ sở dữ liệu được gọi là các biến chủ đầu ra. Bất kể một biến chủ được sử dụng cho đầu vào hay đầu ra, các thuộc tính của nó phải phù hợp với bối cảnh trong đó nó được sử dụng. Vì vậy, bạn phải định nghĩa các biến chủ sao cho các kiểu dữ liệu của chúng và các chiều dài của chúng là tương thích với các kiểu dữ liệu và các chiều dài của các đối tượng cơ sở dữ liệu mà chúng được dự định để làm việc với các đối tượng cơ sở dữ liệu đó. Ngoài ra, mỗi biến chủ được sử dụng trong một ứng dụng cũng phải được gán một tên duy nhất không được phép có tên trùng lặp trong cùng một tệp tin, ngay cả khi sử dụng nhiều phần khai báo. Một công cụ có tên là Bộ tạo khai báo (Declaration Generator) có thể được sử dụng để tạo ra các khai báo biến chủ cho các cột của một bảng đã cho trong một cơ sở dữ liệu. Công cụ này tạo ra các tệp tin mã nguồn khai báo SQL nhúng, sau đó các tệp tin này có thể được chèn vào các ứng dụng bằng ngôn ngữ C/C++, ngôn ngữ Java, COBOL và FORTRAN. Để biết thêm thông tin về các tiện ích này, hãy tham khảo lệnh db2dclgn trong Tham khảo lệnh DB2 (DB2 Command Reference). Vậy thì các biến chủ được được sử dụng như thế nào để di chuyển dữ liệu giữa một ứng dụng và một cơ sở dữ liệu? Cách dễ nhất để trả lời câu hỏi này là hãy xem xét một đoạn mã nguồn nhúng SQL đơn giản, chẳng hạn như một đoạn mã trong Liệt kê 1. Liệt kê 1. Sử dụng đúng các biến chủ // Define The SQL Host Variables Needed [...]... SQLRULES, DISCONNECT và SYNCPOINT khi ứng dụng được tiền biên dịch Chuẩn bị và thi hành các câu lệnh SQL Khi các câu lệnh SQL tĩnh được nhúng vào trong một chương trình ứng dụng, chúng được thi hành khi bắt gặp Tuy nhiên, khi câu lệnh SQL động được sử dụng, chúng có thể được xử lý theo một trong hai cách sau:  Chuẩn bị và thi hành: Cách tiếp cận này tách biệt việc chuẩn bị câu lệnh SQL khỏi việc thi. .. biến SQLVAR tương ứng, có thể được đặt tại đó một cách thủ công (bằng cách sử dụng các câu lệnh của ngôn ngữ lập trình thích hợp) hoặc nó có thể được tạo ra tự động bằng cách thi hành câu lệnh DESCRIBE Thi t lập một kết nối cơ sở dữ liệu Để thực hiện bất kỳ kiểu hoạt động nào đối với một cơ sở dữ liệu, trước tiên bạn phải thi t lập một kết nối với cơ sở dữ liệu ấy Với các ứng dụng SQL nhúng, các kết nối... các ứng dụng SQL nhúng và các đối tượng cơ sở dữ liệu Tuy nhiên, nhiều khi một ứng dụng SQL nhúng cần giao tiếp với chính Trình quản lý cơ sở dữ liệu DB2 Hai cấu trúc dữ liệu SQL đặc biệt được sử dụng để thi t lập đường liên kết truyền thông quan trọng này: cấu trúc dữ liệu SQL Communications Area (SQLCA – vùng trao đổi thông tin SQL) và cấu trúc dữ liệu SQL Descriptor Area (SQLDA – Vùng bộ mô tả SQL) ... tin về các kiểu thông tin cảnh báo có thể được trả về trong phần tử này) Các giá trị SQLSTATE xác định rõ kết quả của câu lệnh SQL được thi sqlstate CHAR(5) hành gần đây nhất (Chúng ta sẽ thảo luận các vấn đề này chi tiết hơn trong phần dưới đây mang tên các SQLSTATE.") Bảng 2 phác thảo các phần tử của mảng sqlca.sqlerrd Bảng 2 Các phần tử của mảng sqlerrd Phần tử Mô tả mảng Nếu một kết nối được thi t... mục SQLVAR thứ cấp chỉ có mặt nếu số lượng các mục SQLVAR được nhân gấp đôi do có sử dụng các LOB hoặc các kiểu dữ liệu riêng biệt: nếu các bộ định vị hoặc các biến tham chiếu tệp tin được sử dụng để biểu diễn các kiểu dữ liệu LOB, thì các mục SQLVAR thứ cấp là không cần thi t Các thông tin được lưu trữ trong một biến cấu trúc dữ liệu SQLDA, cùng với các thông tin được lưu trữ trong bất kỳ các biến SQLVAR... khi có thể thi t lập một kết nối cơ sở dữ liệu khác Mặt khác, khi các kết nối Kiểu 2 được sử dụng, một ứng dụng có thể được kết nối tới một số cơ sở dữ liệu khác nhau cùng một lúc và mỗi kết nối cơ sở dữ liệu có một tập hợp các giao dịch riêng của mình Kiểu ngữ nghĩa kết nối thực tế được sử dụng bởi một ứng dụng SQL nhúng, xác định bằng giá trị được gán cho các tùy chọn của trình tiền biên dịch SQL. .. liệu SQLCA chứa một sưu tập các phần tử được Trình quản lý cơ sở dữ liệu DB2 cập nhật mỗi khi một câu lệnh SQL hay một hàm API quản trị DB2 thi hành Cấu trúc dữ liệu này phải tồn tại trước khi Trình quản lý cơ sở dữ liệu DB2 có thể điền dữ liệu vào nó Vì vậy, bất kỳ ứng dụng nào có chứa SQL nhúng hay gọi một hoặc nhiều API quản trị phải định nghĩa ít nhất một biến cấu trúc dữ liệu SQLCA Thực vậy, một ứng. .. thêm thông tin về các thông tin chẩn đoán có thể được trả lại trong phần tử này) Một mảng của các giá trị ký tự để dùng như các chỉ thị cảnh báo; mỗi phần tử của mảng có chứa hoặc một khoảng trống hoặc chữ cái W Nếu SQL phức hợp được sử dụng, trường này chứa một tích lũy của sqlwarn CHAR(11) các chỉ thị cảnh báo đã được thi t lập cho tất cả các câu lệnh con được thi hành trong khối câu lệnh SQL phức hợp... biến chủ tương ứng vì thế được bỏ qua Nếu trái lại, giá trị tương ứng của biến chủ là hợp lệ Một lần nữa, để hiểu cách các biến chỉ thị được sử dụng như thế nào, việc xem xét một đoạn mã nguồn sẽ có ích Liệt kê 2, được viết bằng ngôn ngữ lập trình C, cho thấy một ví dụ về cách các biến chỉ thị được định nghĩa và được sử dụng như thế nào Liệt kê 2 Sử dụng đúng các biến chỉ thị // Define The SQL Host... phí có liên quan của các nguồn tài nguyên cần thi t để chuẩn bị câu lệnh đã chỉ ra Nếu cấu trúc dữ liệu SQLCA chứa thông tin dành cho một câu lệnh SQL phức hợp, phần tử này chứa một tổng số đếm các câu lệnh con trong khối câu lệnh SQL phức hợp đã thi hành thành công Nếu cấu trúc dữ liệu SQLCA chứa thông tin dành cho một câu lệnh SQL CONNECT đã thi hành thành công, phần tử này chứa giá trị 0 nếu áp dụng . Chuẩn bị cho kỳ thi 733 về Phát triển ứng dụng DB2 9, Phần 4: Lập trình SQL nhúng Xây dựng các ứng dụng có tương tác với DB2 Roger Sanders, Quản lý cao cấp,. một ứng dụng SQL nhúng.  Thi hành các câu lệnh SQL trong một ứng dụng SQL nhúng.  Phân tích các kết quả và xử lý các lỗi thường gặp khi thi hành các câu lệnh SQL trong một ứng dụng SQL nhúng. . cho kỳ thi lấy chứng chỉ Nhà phát triển ứng dụng DB2 (kỳ thi 733) . Các tư liệu trong hướng dẫn này bao gồm các mục tiêu trong Phần 4 của kỳ thi, mang tên " ;Lập trình SQL nhúng& quot;. Bạn

Ngày đăng: 07/08/2014, 09:23

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan