1. Trang chủ
  2. » Công Nghệ Thông Tin

Chuẩn bị cho Kỳ thi 733 về Phát triển ứng dụng DB2 9, Phần 7: Lập trình Java ppt

57 350 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 57
Dung lượng 213,82 KB

Nội dung

 Sử dụng SQL với Java SQLJ để đọc và cập nhật dữ liệu trong một cơ sở Các điều kiện cần trước Để tham dự kỳ thi Phát triển ứng dụng Họ DB2 9, bạn đã phải vượt qua được kỳ thi cơ bản về

Trang 1

Chuẩn bị cho Kỳ thi 733 về Phát triển ứng dụng DB2 9, Phần 7: Lập trình

Java

Dirk deRoos, Kiến trúc sư IT, IBM Toronto Lab

Tóm tắt: Tìm hiểu về cách viết mã Java® có giao diện với các cơ sở dữ liệu

DB2 Đây là Phần 7 trong một loạt bài gồm chín hướng dẫn mà bạn có thể sử dụng

để giúp chuẩn bị cho kỳ thi lấy chứng chỉ phát triển ứng dụng họ DB2® 9 của IBM® (kỳ thi 733)

Trước khi bạn bắt đầu

Về loạt bài viết này

Chứng chỉ Nhà phát triển ứng dụng được IBM công nhận xác nhận với mọi người rằng bạn là một nhà phát triển ứng dụng DB2 cho Linux, UNIX và Windows mức trung cấp hoặc cao cấp và cho biết rằng bạn có các kỹ năng giỏi trong tất cả các công việc lập trình chung cũng như lập trình SQL nhúng, lập trình ODBC/CLI, lập trình NET hoặc lập trình Java

Loạt bài gồm chín hướng dẫn miễn phí này được thiết kế để giúp bạn chuẩn bị cho

kỳ thi lấy chứng chỉ Phát triển ứng dụng DB2 9 cho Linux, UNIX và Windows (kỳ thi 733) Mỗi hướng dẫn bao gồm một liên kết đến một bản tải về dùng thử miễn phí DB2 9 cho Linux, UNIX và Windows Các hướng dẫn này cung cấp một cơ sở vững chắc cho mỗi phần của kỳ thi Tuy nhiên, bạn không nên dựa vào các hướng dẫn này như là sự chuẩn bị duy nhất của bạn cho kỳ thi này

Trang 2

Về hướng dẫn này

Trong hướng dẫn này, bạn sẽ tìm hiểu về cách viết mã Java có giao diện với các

cơ sở dữ liệu DB2 Bạn sẽ thấy làm thế nào để:

 Kết nối với một cơ sở dữ liệu DB2 từ một ứng dụng Java

 Sử dụng JDBC để đọc và cập nhật dữ liệu trong một cơ sở dữ liệu DB2

 Sử dụng SQL với Java (SQLJ) để đọc và cập nhật dữ liệu trong một cơ sở

Các điều kiện cần trước

Để tham dự kỳ thi Phát triển ứng dụng Họ DB2 9, bạn đã phải vượt qua được kỳ thi cơ bản về họ DB2 9 (kỳ thi 730) Bạn có thể sử dụng Loạt bài hướng dẫn Cơ bản về họ DB2 (DB2 Family Fundamentals tutorial series) (xem phần Tài nguyên)

để chuẩn bị cho kỳ thi đó Đây là một loạt hướng dẫn rất phổ biến đã giúp cho nhiều người hiểu các vấn đề cơ bản về họ các sản phẩm DB2

Mặc dù không phải tất cả các tư liệu được thảo luận trong loạt bài hướng dẫn Cơ bản về họ DB2 này là cần thiết để hiểu các khái niệm được mô tả trong hướng dẫn này, nhưng bạn cần phải có một kiến thức cơ sở về:

Trang 3

Các yêu cầu hệ thống

Bạn không cần một bản sao của DB2 để hoàn thành hướng dẫn này Tuy nhiên, bạn có thể tải về một bản DB2 Express-C miễn phí từ trang tải về DB2 Express-C

Nếu bạn có kế hoạch phát triển các ứng dụng Java cho DB2 hoặc bạn có kế hoạch

tự mình thử nghiệm mã mẫu của hướng dẫn này, bạn cần phải hoàn thành nhiệm

vụ sau:

1 Cài đặt DB2 9 cho Linux, UNIX và Windows

2 Tạo cơ sở dữ liệu mẫu Bạn có thể làm điều này từ trình đơn Các bước đầu tiên tạo cơ sở dữ liệu (First Steps Database Creation) hoặc bằng cách chạy

db2sampl từ trình xử lý dòng lệnh DB2 (CLP- Command Line Processor) Mã mẫu trong bài viết này đã được viết để làm việc với cơ sở dữ liệu ấy

Trang 4

3 Cài đặt Môi trường thời gian chạy chạy Java, Ấn bản công nghệ Java 2, Phiên bản 1.4.2 (Java Runtime Environment , Java 2 Technology Edition Version 1.4.2)

4 Cập nhật biến môi trường PATH để chứa thư mục jdk\bin của Java SDK

mà bạn đã cài đặt Lưu ý rằng DB2 bao gồm Phiên bản 5 của SDK Java, trong thư mục $DB2PATH\sqllib\java\jdk\bin ($DB2PATH/sqllib/java/jdk/bin trong UNIX hoặc Linux)

Các môi trường phát triển

Tổng quan

Có nhiều môi trường ở đó bạn có thể phát triển các ứng dụng Java của bạn để sử dụng với các cơ sở dữ liệu DB2 DB2 9.1 cung cấp hai tùy chọn:

Bàn làm việc của nhà phát triển DB2 (DB2 Developer Workbench):

Một môi trường phát triển có tích hợp đồ họa

Dòng lệnh DB2 (DB2 command line): Môi trường cốt lõi ở đó bạn có thể

thi hành các lệnh hoặc các kịch bản lệnh để xây dựng và chạy các ứng dụng mà bạn đã viết bằng một trình soạn thảo văn bản

Bàn làm việc của nhà phát triển DB2

Bàn làm việc của nhà phát triển DB2 là một môi trường phát triển dựa trên Eclipse

có cung cấp các khả năng sau đây, ngoài cơ sở hạ tầng phát triển ứng dụng Java của Eclipse :

 Duyệt và tạo ra các đối tượng cơ sở dữ liệu

Trang 5

 Tạo, chỉnh sửa, gỡ rối, triển khai và thử nghiệm các thủ tục SQL lưu sẵn và các hàm do người dùng định nghĩa

 Phát triển các ứng dụng SQLJ

 Tạo, chỉnh sửa và chạy các câu lệnh SQL

 Tạo, chỉnh sửa và chạy các biểu thức Xquery

Bàn làm việc của nhà phát triển DB2 có sẵn dưới dạng một bản tải về miễn phí (xem phần Tài nguyên)

Dòng lệnh DB2

Từ dòng lệnh DB2, bạn có thể xây dựng và chạy các ứng dụng cơ sở dữ liệu Java của bạn bằng cách sử dụng các lệnh javac, java và sqljcustomize Các ví dụ trong hướng dẫn này giải thích làm thế nào để xây dựng và chạy cả hai, các ứng dụng SQLJ và các ứng dụng JDBC, từ dòng lệnh DB2

Kết nối đến một cơ sở dữ liệu

Tổng quan

JDBC là một API Java mà thông qua nó các chương trình Java có thể kết nối với các cơ sở dữ liệu quan hệ và thi hành các câu lệnh SQL Để cho phép các ứng dụng Java giao tiếp với các cơ sở dữ liệu của nó, DB2 có gồm chứa các trình điều khiển JDBC

Trang 6

Trong phần này, bạn sẽ tìm hiểu làm thế nào để nạp các trình điều khiển JDBC thích hợp nhất cho ứng dụng của bạn và làm thế nào để kết nối với một cơ sở dữ liệu DB2

Các trình điều khiển JDBC

Một trình điều khiển JDBC hoạt động như một giao diện giữa một chương trình JDBC và cơ sở dữ liệu DB2 bao gồm hai trình điều khiển JDBC: trình điều khiển JDBC DB2 Kiểu 2 và trình điều khiển IBM DB2 cho JDBC và SQLJ

Trình điều khiển JDBC DB2 Kiểu 2: Còn được gọi là trình điều khiển

ứng dụng (app driver) Các ứng dụng Java sử dụng trình điều khiển này phải chạy

trên một máy khách DB2, thông qua nó các yêu cầu JDBC chảy đến một máy chủ DB2 Trình điều khiển này đã lạc hậu và bị loại khỏi DB2 9.1, và các bản phát hành trong tương lai của DB2 sẽ không hỗ trợ hoặc gồm chứa trình điều khiển này nữa Chúng tôi đề nghị bạn sử dụng trình điều khiển IBM DB2 cho JDBC và SQLJ thay cho Trình điều khiển JDBC DB2 Kiểu 2 Để nạp Trình điều khiển JDBC DB2 Kiểu 2, hãy gọi phương thức Class.forName() có đối số là

COM.ibm.db2.jdbc.app.DB2Driver

Trình điều khiển JDBC DB2 cho JDBC và SQLJ: Nó cung cấp cả hai

kết nối Kiểu 2 và Kiểu 4 Bạn có thể sử dụng trình điều khiển này cho cả applet lẫn các ứng dụng; nó được đề nghị là trình điều khiển cho cả hai Để nạp Trình điều khiển JDBC DB2 cho JDBC và SQLJ, hãy gọi phương thức Class.forName()

có đối số com.ibm.db2.jcc.DB2Driver

Để sử dụng một trong các trình điều khiển JDBC này trong ứng dụng của bạn, bạn cần phải nhập khẩu các gói Java có chứa API JDBC:

Trang 7

import java.sql.*;

Tải về mã và các ứng dụng mẫu trong hướng dẫn này đã được thử nghiệm để làm việc với các trình điều khiển JDBC DB2 cho JDBC và SQLJ

Tạo một kết nối cơ sở dữ liệu

Khi bạn đã nạp trình điều khiển JDBC thích hợp, bạn có thể kết nối với một cơ sở

dữ liệu từ ứng dụng JDBC của bạn Trong các ứng dụng JDBC, một đối tượng Connection (kết nối) biểu diễn một kết nối cơ sở dữ liệu Từ một đối tượng

DriverManager (có sẵn để sử dụng sau khi trình điều khiển JDBC đã được nạp), bạn có thể sử dụng phương thức getConnection() để thu được một Connection (kết nối) Trong ví dụ sau đây, Trình điều khiển IBM DB2 cho JDBC và SQLJ được nạp và đối tượng DriverManager tạo ra một kết nối cơ sở dữ liệu Kiểu 2

String url = "jdbc:db2:sample";

Class.forName("com.ibm.db2.jcc.DB2Driver");

Connection con =

DriverManager.getConnection(url);

Trang 8

Với Trình điều khiển IBM DB2 cho JDBC và SQLJ, kiểu kết nối cơ sở dữ liệu được xác định bởi URL được chuyển tới phương thức

DriverManager.getConnection() Trong các URL như dưới đây, có liệt kê một tên miền và số cổng của máy chủ cơ sở dữ liệu, đối tượng DriverManager tạo ra một kết nối cơ sở dữ liệu Kiểu 4

String url = "jdbc:db2:sample://localhost:5021";

Bạn cũng có thể tạo các đối tượng Connection khi sử dụng giao diện

DataSource.Giao diện này được khuyến khích nếu bạn đang viết mã sẽ được sử dụng với nhiều máy chủ cơ sở dữ liệu và các trình điều khiển JDBC Giao diện DriverManager không khả chuyển, vì nó đòi hỏi ứng dụng phải chỉ rõ URL của trình điều khiển và tên lớp của trình điều khiển JDBC của một nhà cung cấp cụ thể Các đối tượng DataSource có thể được định nghĩa và được quản lý trên các hệ thống ở đó các ứng dụng của bạn chạy, sử dụng một công cụ như WebSphere Khi

sử dụng một công cụ như vậy, một quản trị viên gán tên lô gic cho các đối tượng DataSource và đăng ký chúng trong một danh mục của Java Naming and

Directory Interface (JNDI - Giao diện thư mục và đặt tên Java) Ứng dụng Java có

sử dụng đối tượng DataSource sau đó có thể gọi nó bằng tên logic của nó và

không cần bất kỳ thông tin nào về nguồn dữ liệu nằm bên dưới

Kết nối cơ sở dữ liệu: Mã mẫu

Ứng dụng mẫu trong phần này giải thích các khái niệm sau đây:

Trang 9

 Nhập khẩu các gói Java có chứa API JDBC

 Nạp Trình điều khiển IBM DB2 cho JDBC và SQLJ

 Tạo một đối tượng Connection

 Sử dụng DriverManager để mở một Connection

Ứng dụng này là một trình vỏ (shell) của một ứng dụng JDBC điển hình các gói JDBC được nhập khẩu, có một kết nối cơ sở dữ liệu và có logic xử lý lỗi trong các khối try/catch (thử/bắt giữ) Để chứng tỏ rằng một kết nối cơ sở dữ liệu là thực sự được thực hiện, đối tượng Connection yêu cầu tên của trình điều khiển JDBC đang được sử dụng bằng cách dùng các phương thức

Trang 10

try

{

Class.forName("com.ibm.db2.jcc.DB2Driver");

con = DriverManager.getConnection (url);

System.out.println("JDBC driver name: " +

Trang 12

Để chạy ứng dụng đã biên dịch, hãy thi hành lệnh sau đây:

java ConnDb

Kết quả đầu ra của ứng dụng sẽ trông như sau:

JDBC driver name: IBM DB2 JDBC Universal Driver

Đối tượng Statement

Các đối tượng Statement được tạo ra bằng cách sử dụng phương thức

Connection.createStatement() Ví dụ:

Statement stmt;

Trang 14

nạp, lấy ra các giá trị cột bằng cách sử dụng các phương thức có thể áp dụng đối với kiểu dữ liệu tương ứng (ví dụ, ResultSet.getInt())

rs = stmt.executeQuery("SELECT LASTNAME, BIRTHDATE

Đối tượng Statement: Mã mẫu

Ứng dụng sau đây giải thích tất cả các khái niệm được thảo luận trong phần trên:

 Tạo một đối tượng Statement

 Thực hiện một câu lệnh INSERT, UPDATE hoặc DELETE

 Thực hiện một truy vấn SQL

 Phân tích cú pháp một đối tượng ResultSet

Trang 15

Ứng dụng này chèn một bản ghi nhân viên vào trong bảng Nhân viên (Employee)

và sau đó chạy một truy vấn đối với bảng đó, yêu cầu mã số và tên họ nhân viên của mỗi bản ghi

Trang 16

String stmt2String = "SELECT EMPNO, LASTNAME FROM EMPLOYEE";

Trang 19

java StmtDb

Kết quả đầu ra của ứng dụng này trông giống như sau:

Employee # Employee surname

Trang 22

Đối tượng PreparedStatement

Các đối tượng PreparedStatement được tạo ra bằng cách sử dụng phương thức Connection.prepareStatement() Ví dụ:

pStmt = con.prepareStatement("UPDATE STAFF SET COMM=? WHERE ID=?");

pStmt.setDouble(1,710.53);

pStmt.setInt(2,350);

pStmt.executeUpdate();

Trang 23

Đối tượng PreparedStatement: Mã mẫu

Ứng dụng dưới đây giải thích tất cả các khái niệm được thảo luận trong phần trên:

 Tạo một đối tượng PreparedStatement

 Sử dụng dấu tham số để gán các giá trị trong các câu lệnh SQL theo

Trang 26

System.out.println("Employee # Employee surname");

Trang 28

javac pStmtDb.java

Để chạy các ứng dụng đã biên dịch, hãy thi hành lệnh sau đây:

java pStmtDb

Kết quả đầu ra của ứng dụng này sẽ giống như sau:

Employee # Employee surname

Trang 29

Trong các mã ví dụ về Statement và PreparedStatement, hai cách tiếp cận khác nhau để cam kết các giao dịch đã được sử dụng: cam kết tự động (autocommit) và cam kết thủ công

Cách tiếp cận được sử dụng trong ví dụ Statement là cam kết tự động, ở đó mỗi câu lệnh đã được cam kết tự động Cam kết tự động được bật cho phép từ trong đối tượng Connection, như sau:

sẽ tự động khôi phục lại Các hoạt động cam kết thủ công hoặc khôi phục lại được thực hiện từ đối tượng Connection, như sau:

con.commit();

con.rollback();

Trang 30

Phát ra các giao dịch phân tán

Để phát ra các giao dịch phân tán từ các ứng dụng Java của bạn, bạn cần phải sử dụng API các giao dịch Java (JTA - Java Transaction API) (Các giao dịch phân tán, còn được gọi là các giao dịch cam kết hai giai đoạn, là các giao dịch cập nhật

dữ liệu trong nhiều hơn một cơ sở dữ liệu) Đặc tả kỹ thuật JTA là thành phần quản lý giao dịch của tiêu chuẩn Nền tảng Java 2, Ấn bản Doanh nghiệp (J2EE - Java 2 Platform, Enterprise Edition)

Trong DB2, các giao dịch phân tán được quản lý thông qua lớp

DB2XADataSource, lớp này triển khai thực hiện giao diện XADataSource từ gói javax.sql

Đối với DB2 9, sự hỗ trợ JTA được cung cấp ở cả hai trình điều khiển IBM DB2 cho JDBC và SQLJ và trình điều khiển JDBC DB2 Kiểu 2 Mã Java dưới đây tạo

ra một cá thể của lớp DB2XADataSource sử dụng trình điều khiển IBM DB2 cho JDBC và SQLJ:

DB2XADataSource db2ds = new

com.ibm.db2.jcc.DB2XADataSource();

Trang 31

Đọc và cập nhật dữ liệu với SQLJ

Tổng quan

API SQLJ là một phần mở rộng của JDBC và nó hỗ trợ thi hành tĩnh câu lệnh SQL Bởi vì DB2 hỗ trợ SQLJ, các nhà phát triển Java có thể khắc phục một hạn chế chính của JDBC, cụ thể là JDBC chỉ có thể thi hành các câu lệnh SQL theo phương thức động Các câu lệnh SQL liên kết tĩnh thường chạy nhanh hơn so với các câu lệnh liên kết động, chúng mang lại cho các ứng dụng SQLJ một lợi thế hiệu năng đáng kể so với các ứng dụng JDBC

Trong phần này, bạn sẽ tìm hiểu làm thế nào để lập trình với API SQLJ bằng cách

sử dụng bối cảnh kết nối, đưa ra các câu lệnh SQL trong các mệnh đề SQLJ có thể chạy được và phân tích cú pháp các bộ kết quả với các trình vòng lặp (iterator)

Trước khi mã nguồn SQLJ có thể được biên dịch, nó cần phải được chuyển thành

mã Java để có thể được biên dịch bằng một trình biên dịch Java Lệnh sqlj thực

Trang 32

hiện phép chuyển đổi này và cũng gọi trình biên dịch Java Nếu bạn có các câu lệnh SQL trong tệp tin nguồn SQLJ của bạn, một tệp tin với tên có phần cuối là _SJProfile0.ser xuất hiện trong thư mục của bạn cùng với tệp class và tệp sqlj

Bạn có thể chạy mã nguồn của bạn một khi bạn đã dịch và đã biên dịch nó Tuy nhiên, các câu lệnh SQL trong ứng dụng của bạn sẽ không được liên kết tĩnh, dẫn đến khả năng hiệu năng kém Để liên kết tĩnh các lệnh SQL trong ứng dụng của bạn, bạn cần phải thực hiện một tùy chỉnh lược thảo của ứng dụng của bạn Bạn có thể thực hiện tuỳ chỉnh này bằng công cụ db2sqljcustomize

Để thực hiện việc tùy chỉnh lược thảo của một ứng dụng đã biên dịch, hãy thi hành lệnh sau đây:

db2sqljcustomize -url jdbc:db2://localhost:50000/sample

-user uid -password pwd

Trang 33

-user me -password mypwd DbApp_SJProfile0.ser

[ibm][db2][jcc][sqlj]

[ibm][db2][jcc][sqlj] Begin Customization

[ibm][db2][jcc][sqlj] Loading profile: DbApp_SJProfile0

[ibm][db2][jcc][sqlj] Customization complete for profile DbApp_SJProfile0.ser

[ibm][db2][jcc][sqlj] Begin Bind

[ibm][db2][jcc][sqlj] Loading profile: DbApp_SJProfile0

[ibm][db2][jcc][sqlj] Driver defaults(user may override): BLOCKING ALL VALIDATE BIND

STATICREADONLY YES

[ibm][db2][jcc][sqlj] Fixed driver options: DATETIME ISO DYNAMICRULES BIND

[ibm][db2][jcc][sqlj] Binding package DBAPP01 at isolation level UR

[ibm][db2][jcc][sqlj] Binding package DBAPP02 at isolation level CS

[ibm][db2][jcc][sqlj] Binding package DBAPP03 at isolation level RS

[ibm][db2][jcc][sqlj] Binding package DBAPP04 at isolation level RR

[ibm][db2][jcc][sqlj] Bind complete for DbApp_SJProfile0

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

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w