Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 20 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
20
Dung lượng
184,14 KB
Nội dung
HãykhởiđầunhanhchóngvớiDB29pureXMLPhần5:PháttriểncácứngdụngJavavớidữliệuXMLcủa
DB2
IBM Data Studio
Data Studio của IBM dựa trên nền tảng Eclipse 3.4, một dự án nguồn mở có sẵn để tải về miễn
phí. Để biên dịch và chạy bất kỳ ứngdụngXMLcủaDB2 nào với bàn làm việc này, bạn cần tạo
một dự án và bao gồm các thư viện DB2 phù hợp trong đường dẫn xây dựngcủadự án, bao gồm
cả các thư viện hỗ trợ trình điều khiển tuân theo JDBC 4.0 của DB2. Để cấu hình môi trường của
bạn, hãy hoàn thành các bước sau:
1. Khởi chạy Data Studio.
2. Tạo một dự án mới. Đầu tiên chúng ta sẽ sử dụng một dự án đơn giản. Chuyển sang
phối cảnh Java (Window > Open Perspective > Java) và chọn File > New > Java
Project (Dự án Java). Làm theo các trình thủ thuật để chỉ rõ tên củadự án. Vớicác mục
khác, hãy giữ lại các thiết lập mặc định.
3. Thêm các thư viện DB2 vào đường dẫn xây dựngdự án của bạn. Chọn dự án của bạn,
nhấn chuột phải và chọn Properties (Các đặc tính). Chọn Java Build Path (Đường dẫn
xây dựng Java), và nhấn vào thẻ Libraries (Các thư viện). Thêm các tệp .jar bên ngoài
phù hợp của DB2, như db2jcc.jar, db2jcc_javax.jar, and db2jcc_license_cu.jar.
4. Theo tùy chọn, tạo ra một gói cho ứngdụngcủa bạn. Chọn dự án của bạn, nhấn chuột
phải và chọn New > Package.
Để biết chi tiết về việc tạo cácdự án và các gói, hãy tham khảo thông tin trợ giúp trực tuyến.
Dữ liệu mẫu
Các ví dụ trong bài viết này làm việc với bảng "clients" (Các khách hàng) đã tạo ra trong bài
"Hãy khởiđầunhanhchóngvớiDB2 9, Phần 2" (developerWorks, 03.2006). Để giúp xem lại
nhanh chóng, bảng này được định nghĩa như là:
Liệt kê 1. Liệt kê mã mẫu với chiều rộng tối đa
create table clients(
id int primary key not null,
name varchar(50),
status varchar(10),
contactinfo xml
)
Liệt kê 2 mô tả một tệp XML mẫu sẽ được chèn ngay vào cột "contactinfo" của bảng này.
Liệt kê 2. Một tệp XML mẫu được chèn vào bảng "clients"
<?xml version="1.0"?>
<Client>
<Address>
<street>54 Moorpark Ave.</street>
<city>San Jose</city>
<state>CA</state>
<zip>95110</zip>
</Address>
<phone>
<work>4084630110</work>
<home>4081114444</home>
<cell>4082223333</cell>
</phone>
<fax>4087776688</fax>
<email>sailer555@yahoo.com</email>
</Client>
Các tham số cấu hình cơ sở dữliệu
Các ví dụ trong hướng dẫn này đơn giản và hoạt động với một lượng nhỏ dữliệu XML, vì vậy
bạn không cần thay đổi các tham số cấu hình cơ sở dữliệu mặc định để làm cho chúng chạy. Tuy
nhiên, các giá trị mặc định có thể không đủ cho một số môi trường sản xuất. Cụ thể là, các giá trị
thiết lập về kích thước bản ghi, vùng lưu trữ đặc biệt (heap) của câu lệnh truy vấn củaJava và
vùng lưu trữ đặc biệt củaứngdụng có thể cần được tăng thêm. Nếu các giá trị này được thiết lập
không phù hợp, hiệu năng thời gian chạy của bạn có thể chậm hoặc bạn có thể không có khả
năng chèn các tài liệuXML lớn vào các bảng củaDB2 do không đủ không gian ghi nhật ký.
Bạn có thể xem lại và thay đổi các tham số cấu hình cơ sở dữliệuDB2 từ DB2 Control Center
(Trung tâm điều khiển của DB2) (chọn Tools > Configuration Assistant) hoặc bộ xử lý dòng
lệnh DB2. Hãy tham khảo hướng dẫn sử dụng sản phẩm để biết các chi tiết.
Kết nối tới cơ sở dữliệucủa bạn
Làm việc vớidữliệuXMLcủaDB2 đòi hỏi thiết lập một kết nối đến cơ sở dữliệu chứa dữliệu
của bạn. Không có gì đặc biệt về đoạn mã này - nó giống như logic mà bạn đã viết để kết nối với
bất kỳ cơ sở dữliệuDB2 nào.
Liệt kê 3 có một lớp trình trợ giúp (helper) vớicác phương thức để thiết lập và đóng một kết nối
cơ sở dữliệu DB2.
Liệt kê 3. Lớp trình trợ giúp để thu nhận và phát hành các kết nối cơ sở dữliệu
public class Conn {
// for simplicity, I've hard-coded account and URL data.
private static String user = "user1";
private static String pwd = "mypassword";
private static String url = "jdbc:db2:test";
// this method gets a database connection
public static Connection getConn(){
Connection conn=null;
// load the appropriate DB2 driver and
// get a connection to the "test" database
try {
Class.forName("com.ibm.db2.jcc.DB2Driver");
conn = DriverManager.getConnection(url, user, pwd);
. . .
}
catch (Exception e) { e.printStackTrace(); }
return conn;
} // end getConn();
// this method closes a database connection
public static void closeConn(Connection conn){
try {
if(conn == null) { return; }
conn.close();
}
catch (Exception e) { e.printStackTrace(); }
finally {
try { conn.close(); }
catch (Exception e) { }
}
} // end closeConn();
} // end class
Bạn sẽ gọi những phương thức này trong cácứngdụng thực hiện các nhiệm vụ lớn hơn, chẳng
hạn như chèn và truy vấn dữliệu XML.
Chèn dữliệuXML
Vì đặc tả XQuery ban đầu đã không xử lý các hoạt động viết vào cơ sở dữliệu (như chèn dữ
liệu), DB2 dựa vào các câu lệnh INSERT quen thuộc của SQL để cho phép các lập trình viên viết
dữ liệuXML mới vào các bảng có chứa các cột XML. DB2 có thể lưu trữ bất kỳ tài liệuXML
đúng định dạng nào lên đến 2GB.
Thông thường, các lập trình viên Java cần chèn dữliệuXML đã chứa trong các tệp vào DB2,
mặc dù nó cũng có thể chèn dữliệuXML từ các chuỗi ký tự, từ dữliệu nhị phân (bao gồm cả các
đối tượng lớn) và từ các câu lệnh chọn ở dưới của SQL. Ở đây cần cân nhắc về cách chèn dữliệu
XML từ các tệp và từ chuỗi ký tự đơn giản. Hãy tham khảo hướng dẫn sử dụngDB29 để biết
chi tiết về các kịch bản chèn khác.
DB2 9 cũng cho phép bạn chèn các tài liệuXML có hoặc không xác nhận hợp lệ chúng dựa vào
các lược đồ XML đã đăng ký trước. Các mẫu trong bài viết này trình bày cả hai cách tiếp cận.
Chèn tệp không xác nhận hợp lệ
Phương thức insertFile() trong Liệt kê 4 minh họa cách chèn dữliệu từ một tệp XML vào cột
"clients.contactinfo". Phương thức này bắt đầu bằng cách định nghĩa một số biến để sử dụng sau.
Ba biến đầu tiên tương ứngvớicác cột mã định danh ID, tên và trạng thái trong bảng "clients".
Biến thứ tư là tên của tệp XML được chèn vào cột "contactinfo". Để cho đơn giản, các giá trị đã
được mã hóa cứng trong phương thức này; trong một môi trường sản xuất, sẽ thu được các giá trị
đầu vào khác nhau.
Sau khi thiết lập một kết nối cơ sở dữ liệu, hãy tạo một chuỗi đơn giản cho câu lệnh INSERT của
bạn. Như bạn thấy, nó trông giống như bất kỳ câu lệnh INSERT khác củaDB2 và sử dụngcácdấu
tham số cho bốn giá trị cột đầu vào của bạn. Câu lệnh INSERT được chuẩn bị như thường lệ và
bốn dấu tham số của nó được thiết lập. Để thiết lập dấu tham số cho cột XML, hãy mở một
FileInputStream, chuyển vào vị trí của tệp XMLcủa chúng ta. Ngoài ra hãy lấy chiều dài của
tệp này và sử dụng thông tin này làm đầu vào cho phương thức setBinaryStream(). Cuối cùng,
thực hiện câu lệnh, kiểm tra các lỗi và đóng kết nối.
Liệt kê 4. Chèn dữliệuXML từ một tệp
public static void insertFile(){
try {
// for simplicity, I've defined variables with input data
int id = 1885;
String name = "Amy Liu";
String status = "Silver";
String fn = "c:/XMLFiles/Client1885.xml"; // input file
// get a connection
Connection conn = Conn.getConn();
// define string that will insert file without validation
String query = "insert into clients (id, name, status, contactinfo)
values (?, ?, ? ,?)";
// prepare the statement
PreparedStatement insertStmt = conn.prepareStatement(query);
insertStmt.setInt(1, id);
insertStmt.setString(2, name);
insertStmt.setString(3, status);
File file = new File(fn);
insertStmt.setBinaryStream(4, new FileInputStream(file),
(int)file.length());
// execute the statement
if (insertStmt.executeUpdate() != 1) {
System.out.println("No record inserted.");
}
. . .
conn.close();
}
catch (Exception e) { . . . }
}
Chèn tệp có xác nhận hợp lệ
Chèn một tệp XML có xác nhận hợp lệ đòi hỏi một chút nỗ lực lập trình bổ sung. Giả sử bạn đã
tạo ra và đã đăng ký tệp ClientInfo.xsd như đã thảo luận trong bài "Hãy khởiđầunhanhchóng
với DB2 9, Phần 2" (developerWorks, 03.2006), bạn chỉ cần thay đổi một dòng mã trong Liệt kê
4 để ra lệnh cho DB2 chèn tệp XML có xác nhận hợp lệ. Mã này liên quan đến định nghĩa về
chuỗi query.
Như trong Liệt kê 5, câu lệnh INSERT đã chỉnh sửa gọi hàm XMLValidate trước khi xác định một
dấu tham số cho dữliệu XML. Hàm này cũng yêu cầu bạn chỉ rõ trình định danh của lược đồ
XML được sử dụng để xác nhận hợp lệ. Ở đây, có tham chiếu đến một lược đồ đã đăng ký trước
được gọi là "user1.mysample".
Liệt kê 5. Chèn dữliệuXML từ một tệp có xác nhận hợp lệ
String query = "INSERT INTO clients (id, name, status contactinfo) " +
"VALUES (?, ?, ?, xmlvalidate(? according to xmlschema id
user1.mysample))";
Nếu tệp XMLđầu vào của bạn có chứa dữliệu là hợp lệ theo lược đồ đã quy định, DB2 chèn
hàng này. Nếu không, toàn bộ câu lệnh sẽ sai và không có dữliệu nào được chèn vào hàng này.
Chèn chuỗi ký tự không xác nhận hợp lệ
Phương thức insertString() trong Liệt kê 5 minh họa cách bạn có thể chèn một tài liệuXML
đúng định dạng được gán cho một biến chuỗi ký tự trong DB2. Logic này không khác nhiều so
với ví dụ trước về chèn dữliệu từ một tệp. Thay vì sử dụng phương thức setBinaryStream()
của câu lệnh đã chuẩn bị của bạn, hãy sử dụng phương thức setString(). Để đơn giản, tài liệu
XML trong định nghĩa biến xml đã được mã hóa cứng trong ví dụ này.
Lưu ý: Có các ký tự thoát (các vạch chéo ngược) trước cácdấu ngoặc kép là một phầncủa tài
liệu XML (ví dụ như số phiên bản XML trong ví dụ dưới đây).
Liệt kê 6. Chèn dữliệuXML từ một chuỗi ký tự
public static void insertString(){
try {
// for simplicity, I've defined variables with input data
int id = 1885;
String name = "Amy Liu";
String status = "Silver";
String xml =
"<?xml version=\"1.0\"?>" +
"<Client>" +
"<Address> " +
"<street>54 Moorpark Ave.</street>" +
"<city>San Jose</city>" +
"<state>CA</state>" +
"<zip>95110</zip>" +
"</Address>" +
"<phone>" +
"<work>4084630110</work>" +
"<home>4081114444</home>" +
"<cell>4082223333</cell>" +
"</phone>" +
"<fax>4087776688</fax>" +
"<email>sailer555@yahoo.com</email>" +
"</Client>";
// get a connection
Connection conn = Conn.getConn();
// define string that will insert file without validation
String query = "insert into clients (id, name, status, contactinfo)
values (?, ?, ? ,?)";
// prepare the statement
PreparedStatement insertStmt = conn.prepareStatement(query);
insertStmt.setInt(1, id);
insertStmt.setString(2, name);
insertStmt.setString(3, status);
insertStmt.setString(4, xml);
// execute the statement
if (insertStmt.executeUpdate() != 1) {
System.out.println("No record inserted.");
}
. . .
conn.close();
}
catch (Exception e) { . . . }
}
Chèn chuỗi ký tự có xác nhận hợp lệ
Như bạn có thể mong đợi, việc xác nhận hợp lệ các tài liệu XML, được đưa ra như là các chuỗi
ký tự, đòi hỏi nỗ lực lập trình thêm một chút. Thật vậy, chỉ có một dòng mã cần được sửa đổi
định nghĩa của biến query. Bạn chỉ cần thay đổi câu lệnh INSERT để gọi hàm XMLValidate,
cũng giống như bạn đã làm trong Liệt kê 5.
Đây là câu lệnh đã chỉnh sửa:
Liệt kê 7. Chèn dữliệuXML từ một chuỗi ký tự có xác nhận hợp lệ
String query = "INSERT INTO clients (id, name, status contactinfo) " +
"VALUES (?, ?, ?, xmlvalidate(? according to xmlschema id
user1.mysample))";
Truy vấn dữliệuXML
Bây giờ bạn biết cách chèn dữliệuXML vào DB2 bằng cách sử dụng một chương trình Java,
bạn đã sẵn sàng để truy vấn dữliệu XML. Hãy đi dần qua một vài ví dụ trong phần này, bắt đầu
với một nhiệm vụ đơn giản (chẳng hạn như lấy toàn bộ một tài liệu XML) và tiến lên nhiều
nhiệm vụ khó khăn hơn (như trả về cácphầncủacác tài liệuXML dựa trên các biến vị ngữ XML
và các biến vị ngữ truy vấn quan hệ).
Mặc dùDB2 hỗ trợ cả SQL lẫn XQuery như là các ngôn ngữ cấp cao nhất, XQuery không cung
cấp một phương tiện để giải quyết cácdấu tham số. Trong thực tế, điều này có nghĩa là bất kỳ
các XQuery nào trong ứngdụngcủa bạn đòi hỏi nhiều các biến vị ngữ truy vấn mã hóa cứng hơn
phải được bọc trong một câu lệnh SQL nhờ sử dụng hàm SQL/XML như là XMLQuery hay
XMLExists. Bài "Hãy khởiđầunhanhchóngvớiDB2 9, Phần 3: Truy vấn dữliệuDB2XML
bằng SQL" (developerWorks, 03.2006) thảo luận các hàm này chi tiết hơn. Ở đây, bạn sẽ thấy
cách sử dụng chúng trong một chương trình Java. Và, chỉ để cho vui, bạn cũng sẽ thấy cách bao
gồm một truy vấn XQuery vớicác biến vị ngữ truy vấn mã hóa cứng trong một ứng dụng.
Lấy toàn bộ các tài liệuXML
Phương thức dựa trên truy vấn đầu tiên của chúng ta khá đơn giản. Nó chỉ lấy toàn bộ thông tin
liên hệ của một khách hàng cụ thể. Một truy vấn về tính chất này có thể được thể hiện dễ dàng
trong SQL. Vì vậy, nếu bạn quen với JDBC, bạn sẽ dễ dàng hiểu được mã này.
Phương thức simpleQuery() trong Liệt kê 8 khai báo một số biến và sau đó thiết lập một kết nối
cơ sở dữliệu bằng cách sử dụng một phương thức trình trợ giúp được định nghĩa trong Liệt kê 2.
Chuỗi query chứa một câu lệnh SQL đơn giản để chọn tất cả các thông tin liên hệ của một khách
hàng cụ thể. Sau khi thực hiện câu lệnh này, ứngdụng in ra các kết quả đã được tìm nạp vào một
biến chuỗi ký tự (stringDoc).
Liệt kê 8. Lấy toàn bộ các tài liệuXML bằng SQL
import java.sql.*;
. . .
public static void simpleQuery() {
PreparedStatement selectStmt = null;
String query = null, stringDoc = null;
ResultSet rs = null;
int clientID = 1885;
try{
// get a connection
Connection conn = Conn.getConn();
// define, prepare, and execute the query
// this will retrieve all XML data for a specific client
query = "select contactinfo from clients where id = " + clientID
selectStmt = conn.prepareStatement(query);
rs = selectStmt.executeQuery();
// check for results
if (rs.next() == false) {
System.out.println("Can't read document with id " + clientID);
}
// fetch XML data as a string and print the results
else {
stringDoc = rs.getString(1);
System.out.println(stringDoc);
}
. . .
conn.close();
}
catch (Exception e) { . . . }
}
Chương trình này in ra chỉ một hàng dữliệu chứa tất cả các thông tin liên hệ XMLcủa khách
hàng cụ thể.
Mặc dù không được hiển thị ở đây, nhưng cũng có thể sử dụng XQuery để lấy toàn bộ một hoặc
nhiều tài liệu XML, khi thực hiện bạn không cần kết hợp cácdấu tham số trong XQuery của bạn.
Phần sau trong bài viết này, bạn sẽ thấy một đoạn trích Java, sử dụng XQuery để lấy dữliệu
XML.
Lấy cácphầncủacác tài liệuXML
Một nhiệm vụ lập trình phổ biến liên quan đến việc lấy ra cácphầncủacác tài liệu XML. Mã
Java trong ví dụ này lấy các tên và các địa chỉ email chính củacác khách hàng có trạng thái
"Bạc." Tên và thông tin trạng thái khách hàng được lưu trữ trong cột VARCHAR của SQL, trong
khi các địa chỉ email được chứa trong các tài liệuXML trong cột "contactinfo".
Để cho ngắn gọn, tôi đã bỏ qua mã được hiển thị trước đây, chỉ bao gồm các dòng nào là mới
hoặc khác trước thôi.
Liệt kê 9. Lấy các đoạn XML và dữliệu quan hệ bằng SQL/XML
. . .
String status = "Silver";
try{
// get a database connection
. . . .
// define, prepare, and execute a query that includes
// (1) a path expression that will return an XML element and
// (2) a parameter marker for a relational column value
String query = "SELECT name, xmlquery('$c/Client/email[1]' " +
" passing contactinfo as \"c\") " +
" from clients where status = ?";
PreparedStatement selectStmt = conn.prepareStatement(query);
selectStmt.setString(1, status);
ResultSet rs = selectStmt.executeQuery();
// iterate over and print the results
while(rs.next() ){
System.out.println("Name: " + rs.getString(1) +
" Email: " + rs.getString(2));
}
. . .
// release resources
}
catch (Exception e) { . . . }
Mã này đưa ra một câu lệnh SQL/XML gọi hàm XMLQuery. Nó cung cấp một biểu thức đường
dẫn đến hàm này làm cho DB2 chuyển hướng đến phần tử "email" đầu tiên bên dưới phần tử
"Client" gốc củacác tài liệuXML đích. (Lưu ý rằng biểu thức đường dẫn phân biệt chữ hoa, chữ
thường). Biến $c và mệnh đề FROM của SQL cho biết nơi có thể tìm thấy các tài liệu đích này
trong cột "contactinfo" của bảng "clients". Mệnh đề WHERE của SQL giới hạn thêm các tài liệu
XML đích theo cáccác tài liệu được tìm thấy chỉ trong các hàng có "trạng thái" khách hàng là
một giá trị cụ thể (trong phương thức này là "Bạc").
Kết quả đầu ra trong chương trình này có thể xuất hiện tương tự như:
Liệt kê 10. Kết quả đầu ra từ ứngdụng trước
Name: Lisa Hansen Email:
Name: Amy Liu Email: <email>sailer555@yahoo.com</email>
. . . .
Trong kết quả đầu ra mẫu này, không có thông tin email nào được trả về cho một khách hàng có
đủ điều kiện (Lisa Hansen) vì phần tử này không tồn tại trong tài liệu "contactinfo" XMLcủa cô
ấy.
Lọc vào các biến vị ngữ quan hệ và XML
Các chương trình Java cũng có thể ra lệnh cho DB2 lọc kết quả đầu ra truy vấn dựa trên các điều
kiện áp dụng cho cả hai dữliệuXML và dữliệu không-XML. Ví dụ sau đây xây dựng trên một
ví dụ trước, trả về các tên và các địa chỉ email chính củacác khách hàng "Bạc" sống tại San Jose,
California. Truy vấn đơn này đang chiếu dữliệu từ các cột XML và không-XML cũng như đang
giới hạn dữliệu dựa trên các nội dungcủa cả hai cột XML và không-XML.
Đoạn trích dưới đây chỉ bao gồm cácphần mã đã thay đổi từ ví dụ trước. Trong trường hợp này,
bây giờ câu lệnh SELECT gọi XMLExists như một phầncủa mệnh đề WHERE để giới hạn các kết
quả vớicác khách hàng sống trong thành phố và bang cụ thể (định nghĩa theo các biến tương ứng
city vàstate).
Liệt kê 11. Lọc dữliệuXML dựa trên các giá trị phần tử XML
. . .
String status = "Silver";
String state = "CA";
String city = "San Jose";
. . .
try{
. . . .
String query = "SELECT name, xmlquery('$c/Client/email[1]' " +
" passing contactinfo as \"c\") " +
" from clients where status = ?"
" and xmlexists('$c/Client/Address[state=$state][city=$city]' " +
" passing contactinfo as \"c\", " +
" cast(? as char(2)) as \"state\", " +
" cast(? as varchar(30)) as \"city\" )";
PreparedStatement selectStmt = conn.prepareStatement(query);
selectStmt.setString(1, status);
selectStmt.setString(2, state);
selectStmt.setString(3, city);
. . .
}
Hầu hết truy vấn sẽ quen thuộc với bạn, vì vậy phần này chỉ tập trung vào bốn dòng cuối cùng
của nó. Hàm XMLExists ra lệnh cho DB2 xác định xem một tài liệuXML cụ thể có chứa một địa
chỉ khách hàng có thành phố và bang cụ thể không. Mệnh đề PASSING quy định có thể tìm các tài
liệu XML ở đâu trong cột "contactinfo". Hàm CAST được gọi hai lần để gộp các giá trị củacác
tham số đầu vào (đối với thành phố và bang) vớicác kiểu dữliệu phù hợp.
Kết quả đầu ra của chương trình này tương tự với kết quả trong Liệt kê 9, giả sử cả hai khách
hàng Lisa Hansen và Amy Liu sống ở San Jose, California.
Sử dụng XQuery như là một ngôn ngữ cấp cao nhất
Mặc dùDB2 hỗ trợ đầy đủ cho XQuery như một ngôn ngữ cấp cao nhất, đặc tả XQuery ban đầu
không xử lý cácdấu tham số. Trong thực tế, điều này hạn chế việc sử dụngcác XQuery trong
các ứngdụng Java. Cácphần trước đã minh họa cách bạn có thể nhúng XQueries trong SQL (ví
dụ, khi sử dụngcác hàm XMLQuery và XMLExists để kết hợp cácdấu tham số. Phần này tìm hiểu
những gì bạn có thể làm với XQuery thuần túy trong cácứngdụngJavacủa bạn.
[...]... dữ liệuXML Để cập nhật và xóa dữ liệuXML được lưu trữ trong DB2, bạn sử dụngcác câu lệnh SQL UPDATE và DELETE Các câu lệnh này có thể bao gồm các hàm SQL /XML giới hạn các hàng và các cột đích dựa trên các giá trị phần tử XML được lưu trữ trong các cột XML Ví dụ, bạn có thể xoá các hàng chứa thông tin về các khách hàng sống trong vùng có mã vùng bưu điện cụ thể hoặc cập nhật dữliệuXML (và dữ liệu. .. toàn bộ tài liệuXML cho DB2 Họ chỉ cần quy định cácphần tử XML được cập nhật và DB2 bảo toàn dữliệu tài liệu không thay đổi cũng như cập nhật cácphần tử đã quy định Các lập trình viên ban hành các câu lệnh UPDATE cần quy định toàn bộ tài liệu (không chỉ cácphần tử mà họ muốn thay đổi) Tuy nhiên, một phầncủa bản phát hành DB29. 5 đã đơn giản hóa rất nhiều việc cập nhật các tài liệuXML hiện có Trong... Các ví dụ cập nhật VớiDB2 9, bạn có thể cập nhật dữliệu trong một cột XML bằng cách sử dụng câu lệnh SQL UPDATE hoặc một thủ tục được lưu trữ, như là DB2XMLFUNCTIONS.XMLUPDATE Trong cả hai trường hợp, cập nhật cột XML xảy ra ở một mức tài liệu chứ không phải ở một mức phần tử Tuy nhiên, các lập trình viên, những người cập nhật bằng cách sử dụngcác thủ tục đã lưu, không cần cung cấp toàn bộ tài liệu. .. trong bài "Hãy khởiđầunhanhchóng với DB2 9, Phần 4: Truy vấn dữ liệuDB2XML bằng XQuery" (developerWorks, 04.2006) XQuery này xác định những khách hàng nào sinh sống tại San Jose, California Đối với mỗi khách hàng như vậy, nó dựng lên một đoạn XML chứa một "emailList" bao gồm tất cả các địa chỉ email của khách hàng đó Cuối cùng, nó trả về một chuỗi các emailList Liệt kê 12 Lấy các đoạn XML bằng XQuery... trữ củaDB2 có thể được viết như thế nào để lấy cácphầncủacác tài liệuXML Kịch bản này sử dụngcác trình thủ thuật trong Data Studio để tạo, triển khai và chạy mã thủ tục được lưu trữ SQL cần thiết Nếu muốn, bạn có thể pháttriển và triển khai một thủ tục được lưu trữ SQL tương đương khi sử dụng bộ xử lý dòng lệnh DB2 Ngoài ra, bạn có thể viết các thủ tục được lưu trữ dựa trên XML bằng Java Với. .. Output (Đầu ra dữ liệu) Các thủ tục đã lưu Trong các môi trường được nối mạng, các thủ tục được lưu trữ thường làm giảm giao tiếp cần thiết giữa cácứngdụng máy khách và DB2 Tất nhiên, điều này cải thiện hiệu năng thời gian chạy VớiDB2 9, các thủ tục được lưu trữ có thể bao gồm các tham số và các biến XML Trong khi việc thảo luận pháttriển thủ tục được lưu trữ chi tiết nằm ngoài phạm vi của bài viết... XQuery Vì hầu hết các lập trình viên Java viết cácứngdụng đòi hỏi cácdấu tham số, nên họ thường sử dụng SQL /XML Phần này đi qua một ví dụ ngắn về cách sử dụng trình xây dựng truy vấn SQL để tạo ra một câu lệnh SQL /XML tương tự như một câu lệnh có trong Liệt kê 9 Để tạo ra một câu lệnh SQL /XML, hãy thực hiện các bước sau: 1 Chuẩn bị vùng làm việc của bạn 2 Quy định các đặc điểm truy vấn của bạn 3 Thực... của bạn 3 Triển khai và thử nghiệm thủ tục của bạn Hãy lần lượt đi dần qua từng bước này Chuẩn bị vùng làm việc của bạn Thủ tục được lưu trữ được định nghĩa như là một phầncủa một dự án Dữliệu Nếu bạn vẫn chưa làm như vậy, hãy mở phối cảnh Dữ liệu, thiết lập một kết nối cơ sở dữliệu và tạo một dự án Dữliệu Để biết chi tiết, hãy xem phần Chuẩn bị vùng làm việc của bạn ở trên Tạo thủ tục của bạn Thủ... liệu XML) chỉ vớicác khách hàng sống trong một bang cụ thể Vì cú pháp để sử dụngcác hàm SQL /XML trong các câu lệnh UPDATE và DELETE có cùng cú pháp để sử dụng chúng trong các câu lệnh SELECT, nên sẽ không nhắc lại toàn bộ các mẫu mã ở đây Thay vào đó, chỉ cần đưa ra các đoạn trích ngắn Trước tiên, hãy xem xét các hoạt động DELETE Các ví dụ xóa Xóa một hàng chứa dữ liệuXML là đơn giản Chỉ cần sử dụng. .. muốn giới hạn các hoạt động DELETE của bạn dựa trên các giá trị phần tử XML, thì chỉ cần gọi các hàm SQL /XML thích hợp trong mệnh đề WHERE của bạn Liệt kê 14 sử dụng hàm XMLExists để xác định thông tin về tất cả các khách hàng sống ở Maine (viết tắt là "ME") cần xóa: Liệt kê 15 Xóa dữliệu dựa trên một giá trị phần tử XML String state = "ME"; String query = "delete from clients " + " where xmlexists('$y/Client/Address[state=$state]' . Hãy khởi đầu nhanh chóng với DB2 9 pureXML Phần 5: Phát triển các ứng dụng Java với dữ liệu XML của DB2 IBM Data Studio Data Studio của IBM dựa trên nền tảng Eclipse. nhờ sử dụng hàm SQL /XML như là XMLQuery hay XMLExists. Bài " ;Hãy khởi đầu nhanh chóng với DB2 9, Phần 3: Truy vấn dữ liệu DB2 XML bằng SQL" (developerWorks, 03.2006) thảo luận các hàm. túy trong các ứng dụng Java của bạn. Ví dụ sau đây chứa một XQuery tương tự như một XQuery đã trình bày trong bài " ;Hãy khởi đầu nhanh chóng với DB2 9, Phần 4: Truy vấn dữ liệu DB2 XML bằng