跳转到内容

XQuery/XQuery SQL 模块

来自维基教科书,开放世界中的开放书籍

您想在 XQuery 代码中执行 SQL 查询。

eXistdb 提供了一个用于执行 SQL 查询的模块。

配置步骤

[编辑 | 编辑源代码]
  1. 启用模块
  2. 配置您的连接字符串
  3. 执行测试查询

启用 SQL 模块

[编辑 | 编辑源代码]

您的第一步是启用 SQL 模块。为此,您必须从 EXIST_HOME 目录中的 conf.xml 文件中取消注释以下行

<module class="org.exist.xquery.modules.sql.SQLModule"
   uri="http://exist-db.org/xquery/sql" />

在 eXist 1.5 中,还有一个未记录的 Oracle 模块。

<module class="org.exist.xquery.modules.oracle.OracleModule"
     uri="http://exist-db.org/xquery/oracle" />

安装驱动程序库

[编辑 | 编辑源代码]

SQL 模块使用 JDBC 进行其数据库连接,因此对于您想要连接的每种数据库类型,都需要一个 JDBC 驱动程序。JDBC 驱动程序应放置在 EXIST_HOME/lib/user 中。


完成后,您必须重新启动服务器。您现在应该在函数列表中看到额外的 SQL 模块文档,并且在连接函数调用中使用的驱动程序类应该被找到。

执行查询

[编辑 | 编辑源代码]

为了执行查询,您必须执行两个步骤

  1. 获取到数据库的连接
  2. 执行查询

有五种不同的函数可以获取到数据库的连接,但只有一个函数可以执行查询。

连接字符串允许您使用适当的用户名和密码连接到正确的服务器。

在最基本的形式中,get-connection 函数的格式如下

  sql:get-connection('JavaClass', 'JDBC-Connection-URL')

此格式假设您可以将数据库的登录名和密码直接放在 JDBC 连接 URL 中。

如果您无法做到这一点,则带有用户名和密码的连接字符串的格式为

  sql:get-connection('JavaClass', 'JDBC-Connection-URL', 'username', 'password')

请注意,某些系统也会将用户名和密码放在 JDBC 连接字符串中。

例如,在 MySQL 中,字符串可能是

  sql:get-connection("com.mysql.jdbc.Driver", 'jdbc:mysql://127.0.0.1/db1', 'mysql-user-name', 'mysql-password')

在 Oracle 中,字符串可能是

  sql:get-connection('oracle.jdbc.OracleDriver', 'jdbc:oracle:thin:[USER/PASSWORD]@//[HOST][:PORT]/SERVICE", 'jdbc-connection-string', 'mysql-user-name', 'mysql-password')
let $connection := sql:get-connection("com.mysql.jdbc.Driver", 'jdbc:mysql://127.0.0.1/db1', 'mysql-user-name', 'mysql-password')
let $q1 := "select * from table1"
return sql:execute( $connection, $q1, fn:true() )

eXistdb 文档

华夏公益教科书