技术开发 频道

为DB2 XML数据开发Java应用程序

    数据库配置参数

    本文中的例子很简单,它们处理少量的 XML 数据,所以您不需要更改默认的数据库配置参数也能让它们运行。但是默认值对一些生产环境来说可能是不够的。具体来说,日志大小、Java 堆、查询语句堆和应用程序堆的设置值可能需要增加。如果这些值设置得不适当,那么运行时性能可能会很低,或者由于日志空间不够而不能将大型 XML 文档插入 DB2 表中。

    可以从 DB2 Control Center(选择 Tools > Configuration Assistant)或 DB2 命令行处理器查看和更改 DB2 数据库配置参数。有关详细信息,请参考产品手册。

    连接数据库

    处理 DB2 XML 数据需要建立到包含数据的数据库的连接。关于该代码没有什么特殊的 —— 与编写到任何 DB2 数据库的连接的逻辑相同。

    清单 2 包含一个 Helper 类,其中具有用于建立和关闭 DB2 数据库连接的方法。

    清单 2. 用于获得和释放数据库连接的 Helper 类

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

    您将在执行广泛任务(比如插入和查询 XML 数据)的应用程序中调用这些方法。

    插入 XML 数据

    由于最初的 XQuery 规范没有解决数据库写操作(比如插入数据),所以 DB2 依赖于熟悉的 SQL INSERT 语句来允许程序员将新的 XML 数据写入包含 XML 列的表中。DB2 最多可存储 2 GB 格式良好的 XML 文档。

    通常,Java 程序员需要将包含在文件中的 XML 数据插入到 DB2 中,尽管也可以从字符串、二进制数据(包括大对象)和 SQL 子选择语句插入 XML 数据。这里介绍了如何从文件和简单的字符串插入 XML 数据。有关其他插入场景的详细信息,请参考 DB2 Viper 手册。

    DB2 Viper 也允许您插入 XML 文档时针对以前注册的 XML 模式进行验证或不进行验证。本文中的例子介绍了这两种方法。

    插入文件时不进行验证

    清单 3 中的 insertFile() 方法演示了如何将 XML 文件中的数据插入 "clients.contactinfo" 列。该方法首先定义几个变量供以后使用。前 3 个变量对应于 "clients" 表中的 ID、name 和 status 列。第 4 个是将要插入 "contactinfo" 列的 XML 文件的名称。为简单起见,值已经硬编码在该方法中;在生产环境中,输入值将以不同的方式获得。

    在建立数据库连接之后,为 INSERT 语句创建一个简单的字符串。如您所见,它看起来与任何其他 DB2 INSERT 语句一样,并对四个输入列值使用参数标志符(marker)。INSERT 语句像平常一样准备好了,它的四个参数标志符也设置好了。要为 XML 列设置标志符,需打开一个 FileInputStream,并传递 XML 文件的位置。也获得该文件的长度,并使用该信息作为 setBinaryStream() 方法的输入。最后,执行该语句,检查错误,并关闭连接。

    清单 3. 从文件插入 XML 数据  

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) { . . . } }
0
相关文章