XQuery/XQuery SQL 模块
外观
< XQuery
您想在 XQuery 代码中执行 SQL 查询。
eXistdb 提供了一个用于执行 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 模块文档,并且在连接函数调用中使用的驱动程序类应该被找到。
为了执行查询,您必须执行两个步骤
- 获取到数据库的连接
- 执行查询
有五种不同的函数可以获取到数据库的连接,但只有一个函数可以执行查询。
连接字符串允许您使用适当的用户名和密码连接到正确的服务器。
在最基本的形式中,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() )