Hãy khởi đầu nhanh chóng với DB2 9 pureXML, Phần 3: Truy vấn dữ liệu XML của DB2 bằng SQL

Quay trở lại bài viết

Như đã đề cập trong bài viết chính, chúng ta không có thời gian để thảo luận về các chủ đề phát triển ứng dụng cụ thể ở đây. Nhưng trong trường hợp mà bạn đang tự hỏi làm thế nào để một ứng dụng Java có thể ban hành một câu lệnh SELECT của SQL/XML, chúng tôi đã có một trích đoạn mã dưới đây. Trích đoạn này cho thấy cách xác định các tên của các khách hàng sống trong một vùng có mã vùng bưu điện cụ thể.

Nếu bạn quen thuộc với JDBC, bạn sẽ thấy ví dụ này dễ hiểu. Sau khi khai báo và định nghĩa các biến cần thiết, hãy thiết lập một kết nối cơ sở dữ liệu tiếp theo quá trình DB2 tiêu chuẩn. Rồi, chúng ta chuẩn bị một chuỗi ("truy vấn") chứa câu lệnh SELECT của bạn. Truy vấn giống như phiên bản cũ hơn mà bạn đã tạo trong bài viết chính (xem Liệt kê 7), trừ khi nó

  • sử dụng một dấu tham số cho giá trị mã vùng bưu điện.
  • sử dụng các ký tự dấu thoát xung quanh các biến trong chuỗi SELECT cần được đặt bên trong các dấu ngoặc kép. (Trong ví dụ này, chúng là "c" và "x".)
  • rõ ràng gộp giá trị của tham số đầu vào của chúng ta với một kiểu dữ liệu thích hợp.

Sau đó bạn chuẩn bị câu lệnh SELECT, thiết lập tham số đầu vào của nó tới giá trị đích của bạn, được định nghĩa trong biến Java "zipCode" (mã vùng bưu điện). Chúng ta đã sử dụng một kiểu Chuỗi ký tự ở đây vì định nghĩa lược đồ XML mà chúng ta đã tạo ra trong bài viết "Hãy khởi đầu nhanh chóng với DB2 9, Phần 2" (developerWorks, 03. 2006) đã định nghĩa các mã vùng bưu điện là các chuỗi XML. Tuy nhiên, kiểu số nguyên cũng sẽ làm việc. Cuối cùng, thực hiện câu lệnh, xử lý kết quả được trả về như mong muốn và đóng kết nối cơ sở dữ liệu đó.

Liệt kê A. Đoạn trích mã Java™ để phát hành một câu lệnh SQL/XML
. . . 
// define variables 
PreparedStatement selectStmt = null; 
String query = null;
ResultSet rs = null;
Connection conn = null;
String zipCode = "95116";

try {

. . . 
// get a DB2 database connection following the standard process
. . . 

// create the string for our SELECT statement
//
// if we were to issue this query interactively, we'd write: 
//	select name from clients
//	where xmlexists('$c/Client/Address[zip="95116"]'
//	passing clients.contactinfo as "c")
// 
// because we're including it in a Java program, we need to 
// use escape characters around the double quotation marks.  
// we also need to explicitly cast our parameter marker value to 
// the appropriate type. 
query = "select name from clients where xmlexists(" +
   "'$c/Client/Address[zip=$x]' "+
   "passing clients.contactinfo AS \"c\", cast(? as char(5)) as \"x\" )";

// prepare the statement and set the input parameter
selectStmt = conn.prepareStatement(query);
selectStmt.setString(1, zipCode);

// execute the statement 
rs = selectStmt.executeQuery();

// process the results as desired
. . . 

// release resources and close the connection 
. . . 
}
			    
catch (Exception e) { . . .  }

Quay trở lại bài viết