使用 XQJ 的简单查询
Simple Query Using XQJ
前言:Oracle 实现可能不是开源的。解决方法似乎是使用 saxonica
.
如何导入 OXQDataSource
?
Oracle 使用:
import oracle.xml.xquery.OXQDataSource;
但这从何而来?
我不明白要导入什么,也不知道 JAR
应该在 class 路径上 XQJ
示例 7-1
来自 Oracle docs 因为我在尝试编译时得到 error: package oracle.xml.xquery does not exist
。
package 是 java.lang.Object
下 XQJ
的 package 吗?
编译错误,包不存在:
thufir@dur:~/NetBeansProjects/helloWorldBaseX$
thufir@dur:~/NetBeansProjects/helloWorldBaseX$ gradle clean run
> Task :compileJava FAILED
/home/thufir/NetBeansProjects/helloWorldBaseX/src/main/java/org/basex/examples/local/App.java:15: error: package oracle.xml.xquery does not exist
import oracle.xml.xquery.OXQDataSource;
^
/home/thufir/NetBeansProjects/helloWorldBaseX/src/main/java/org/basex/examples/local/App.java:46: error: cannot find symbol
OXQDataSource ds = new OXQDataSource();
^
symbol: class OXQDataSource
location: class App
/home/thufir/NetBeansProjects/helloWorldBaseX/src/main/java/org/basex/examples/local/App.java:46: error: cannot find symbol
OXQDataSource ds = new OXQDataSource();
^
symbol: class OXQDataSource
location: class App
3 errors
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':compileJava'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 0s
2 actionable tasks: 2 executed
thufir@dur:~/NetBeansProjects/helloWorldBaseX$
导入代码:
package org.basex.examples.local;
import java.io.IOException;
import java.util.Properties;
import java.util.logging.Logger;
import javax.xml.xquery.XQConnection;
import javax.xml.xquery.XQException;
import javax.xml.xquery.XQPreparedExpression;
import javax.xml.xquery.XQSequence;
import org.basex.core.BaseXException;
import org.basex.core.Context;
import org.basex.core.cmd.CreateDB;
import org.basex.core.cmd.DropDB;
import org.basex.core.cmd.List;
import oracle.xml.xquery.OXQDataSource;
public final class App {
private static final Logger LOG = Logger.getLogger(App.class.getName());
private final Properties properties = new Properties();
private final Context context = new Context();
public static void main(String[] args) throws BaseXException, IOException {
LOG.fine("starting..");
new App().helloWorld();
}
private void list() throws BaseXException {
LOG.info(new List().execute(context));
}
private void helloWorld() throws BaseXException, IOException {
properties.loadFromXML(App.class.getResourceAsStream("/basex.xml"));
String databaseName = properties.getProperty("databaseName");
String databasePath = properties.getProperty("databasePath");
list();
new CreateDB(databaseName, databasePath).execute(context);
list();
new DropDB(databaseName).execute(context);
list();
}
private void oracleXQJ() throws XQException {
OXQDataSource ds = new OXQDataSource();
XQConnection con = ds.getConnection();
String query = "<hello-world>{1 + 1}</hello-world>";
XQPreparedExpression expr = con.prepareExpression(query);
XQSequence result = expr.executeQuery();
// prints "<hello-world>2</hello-world>"
System.out.println(result.getSequenceAsString(null));
result.close();
expr.close();
con.close();
}
}
我只是将导入语句放入其中以生成特定错误。应该导入什么,从什么导入?
只有这个 class 出了问题,原因不明。不确定如何导入,也不知道要为该导入在 上放什么。
我see:
The lib directory contains these JAR and ZIP files:
classgen.jar
jdev-rt.zip
oraclexsql.jar
transx.zip
xml.jar
xml2.jar
xmldemo.jar
xmlmesg.jar
xmlparserv2.jar
xschema.jar
xsqlserializers.jar
xsu12.jar
The jlib directory contains these JAR files:
orai18n.jar
orai18n-collation.jar
orai18n-mapping.jar
orai18n-utility.jar
其中一个,大概有 OXQDataSource
。
XQJ 的设计是,您首先创建一个代表特定 XQuery 引擎和数据库的数据源,然后建立从您的应用程序到该数据源的连接,然后您使用标准接口执行查询数据源。原则上,如果要切换到不同的查询引擎,只需要实例化不同的数据源即可。因此,如果您想从 Oracle 切换到 Saxon,则实例化 Saxon DataSource 而不是 Oracle DataSource。
前言:Oracle 实现可能不是开源的。解决方法似乎是使用 saxonica
.
如何导入 OXQDataSource
?
Oracle 使用:
import oracle.xml.xquery.OXQDataSource;
但这从何而来?
我不明白要导入什么,也不知道 JAR
应该在 class 路径上 XQJ
示例 7-1
来自 Oracle docs 因为我在尝试编译时得到 error: package oracle.xml.xquery does not exist
。
package 是 java.lang.Object
下 XQJ
的 package 吗?
编译错误,包不存在:
thufir@dur:~/NetBeansProjects/helloWorldBaseX$
thufir@dur:~/NetBeansProjects/helloWorldBaseX$ gradle clean run
> Task :compileJava FAILED
/home/thufir/NetBeansProjects/helloWorldBaseX/src/main/java/org/basex/examples/local/App.java:15: error: package oracle.xml.xquery does not exist
import oracle.xml.xquery.OXQDataSource;
^
/home/thufir/NetBeansProjects/helloWorldBaseX/src/main/java/org/basex/examples/local/App.java:46: error: cannot find symbol
OXQDataSource ds = new OXQDataSource();
^
symbol: class OXQDataSource
location: class App
/home/thufir/NetBeansProjects/helloWorldBaseX/src/main/java/org/basex/examples/local/App.java:46: error: cannot find symbol
OXQDataSource ds = new OXQDataSource();
^
symbol: class OXQDataSource
location: class App
3 errors
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':compileJava'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 0s
2 actionable tasks: 2 executed
thufir@dur:~/NetBeansProjects/helloWorldBaseX$
导入代码:
package org.basex.examples.local;
import java.io.IOException;
import java.util.Properties;
import java.util.logging.Logger;
import javax.xml.xquery.XQConnection;
import javax.xml.xquery.XQException;
import javax.xml.xquery.XQPreparedExpression;
import javax.xml.xquery.XQSequence;
import org.basex.core.BaseXException;
import org.basex.core.Context;
import org.basex.core.cmd.CreateDB;
import org.basex.core.cmd.DropDB;
import org.basex.core.cmd.List;
import oracle.xml.xquery.OXQDataSource;
public final class App {
private static final Logger LOG = Logger.getLogger(App.class.getName());
private final Properties properties = new Properties();
private final Context context = new Context();
public static void main(String[] args) throws BaseXException, IOException {
LOG.fine("starting..");
new App().helloWorld();
}
private void list() throws BaseXException {
LOG.info(new List().execute(context));
}
private void helloWorld() throws BaseXException, IOException {
properties.loadFromXML(App.class.getResourceAsStream("/basex.xml"));
String databaseName = properties.getProperty("databaseName");
String databasePath = properties.getProperty("databasePath");
list();
new CreateDB(databaseName, databasePath).execute(context);
list();
new DropDB(databaseName).execute(context);
list();
}
private void oracleXQJ() throws XQException {
OXQDataSource ds = new OXQDataSource();
XQConnection con = ds.getConnection();
String query = "<hello-world>{1 + 1}</hello-world>";
XQPreparedExpression expr = con.prepareExpression(query);
XQSequence result = expr.executeQuery();
// prints "<hello-world>2</hello-world>"
System.out.println(result.getSequenceAsString(null));
result.close();
expr.close();
con.close();
}
}
我只是将导入语句放入其中以生成特定错误。应该导入什么,从什么导入?
只有这个 class 出了问题,原因不明。不确定如何导入,也不知道要为该导入在
我see:
The lib directory contains these JAR and ZIP files:
classgen.jar
jdev-rt.zip
oraclexsql.jar
transx.zip
xml.jar
xml2.jar
xmldemo.jar
xmlmesg.jar
xmlparserv2.jar
xschema.jar
xsqlserializers.jar
xsu12.jar
The jlib directory contains these JAR files:
orai18n.jar
orai18n-collation.jar
orai18n-mapping.jar
orai18n-utility.jar
其中一个,大概有 OXQDataSource
。
XQJ 的设计是,您首先创建一个代表特定 XQuery 引擎和数据库的数据源,然后建立从您的应用程序到该数据源的连接,然后您使用标准接口执行查询数据源。原则上,如果要切换到不同的查询引擎,只需要实例化不同的数据源即可。因此,如果您想从 Oracle 切换到 Saxon,则实例化 Saxon DataSource 而不是 Oracle DataSource。