为 DB2 XML 数据开发 Java 应用程序
2009-11-12 00:00:00 来源:WEB开发网如 清单 4 所示,修订后的 INSERT 语句在为 XML 数据指定参数标志符之前调用 XMLValidate 函数。该函数也需要您指定将用于验证的 XML 模式标识符。在这里,引用的是前面注册的一个叫做 "user1.mysample" 的模式。
清单 4. 从文件插入 XML 数据时进行验证
String query = "INSERT INTO clients (id, name, status contactinfo) " +
"VALUES (?, ?, ?, xmlvalidate(? according to xmlschema id user1.mysample))";
如果您的 XML 输入文件包含根据指定模式来说有效的数据,那么 DB2 就会插入行。否则,整个语句失败,不会插入该行的数据。
插入字符串时不进行验证
清单 5 中所示的 insertString() 方法展示了如何将分配给字符串变量的格式良好的 XML 文档插入 DB2 中。逻辑与前一例子中从文件插入数据时的逻辑没有太大的不同。不是使用您的准备语句的 setBinaryStream() 方法,而是使用 setString() 方法。本例中为了简单起见,xml 变量定义中的 XML 文档已经进行了硬编码。
注意:转义字符(反斜杠)包含在是 XML 文档一部分的引号之前(比如下面例子中的 XML 版本号)。
清单 5. 从字符串插入 XML 数据
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) { . . . }
}
更多精彩
赞助商链接