java BaseX XQJ executeQuery()-带有insert的方法返回异常
我正在尝试使用JavaBaseXQJAPI将数据插入XML文件java BaseX XQJ executeQuery()-带有insert的方法返回异常,java,xquery,basex,Java,Xquery,Basex,我正在尝试使用JavaBaseXQJAPI将数据插入XML文件 代码如下(不允许导入): 上述代码抛出此异常(在行中,语句“rs.writeSequence(System.out,null);”): 为什么会出现这种情况和如何向数据库发出有效的“插入”指令? 我猜在插入时使用“executeQuery()-method”可能有问题,因为它可以处理发出的其他两条指令。我猜查询实际上正在工作。然而,您实际期望的返回值是什么 您执行的XQuery Update语句不返回任何结果(有关更多信息,请参阅
代码如下(不允许导入): 上述代码抛出此异常(在行中,语句“rs.writeSequence(System.out,null);”):
为什么会出现这种情况和如何向数据库发出有效的“插入”指令?
我猜在插入时使用“executeQuery()-method”可能有问题,因为它可以处理发出的其他两条指令。我猜查询实际上正在工作。然而,您实际期望的返回值是什么 您执行的XQuery Update语句不返回任何结果(有关更多信息,请参阅),因此结果不是XQItem
此外,如果要修改主存节点(如使用
fn:doc
读取它们),可能需要启用该选项。如果确实要转换文档并将结果返回给应用程序,则可能需要使用transform
表达式。我希望在文本编辑器中打开该数据库的xml文件时会出现插入。我不希望有任何特殊的返回值。我该怎么做才能做到这一点呢?我认为您将文件系统中的文档与数据库中的文档混淆了。如果将文档放在数据库中,它们将以特定的存储格式存储(以便更快地访问和查询),而不是以纯文本存储。然后,该文档独立于原始输入文档。但是,您可以使用写回选项将更改传播到原始文档。或者您可以使用fn:put
或file:write
(请参阅)将数据写入磁盘。谢谢,我尝试了以下操作:XQResultSequence rs=xqe.executeQuery(“WRITEBACK true”)
和xqe.executeCommand(“写回真”)
和ds.setProperty(“写回”、“真”)代码>。他们不工作。如何通过java设置写回选项代码>成功了。
public class BaseXTest {
public static void main(String[] args) throws Exception {
// obtain an XQDataSource instance
XQDataSource ds = new BaseXXQDataSource();
ds.setProperty("serverName", "localhost");
ds.setProperty("port", "1984");
ds.setProperty("user", "admin");
ds.setProperty("password", "admin");
XQConnection xqc = ds.getConnection();
XQExpression xqe = xqc.createExpression();
xqe.executeCommand("CREATE DB myTestDB");
ds.setProperty("databaseName", "myTestDB");
File myTestDbDataFile = new File("PATH_TO_MY_XML_FILE");
XQConnection2 xqc2 = (XQConnection2) ds.getConnection();
XQItem xqItem = xqc2.createItemFromDocument(new FileInputStream(myTestDbDataFile), null, null);
xqc2.insertItem(myTestDbDataFile.getName(), xqItem, null);
//this query works
// XQResultSequence rs = xqe
// .executeQuery("for $i in (1 to 10) return $i");
//this query works too
// XQResultSequence rs =
// xqe.executeQuery("doc('PATH_TO_MY_XML_FILE')/myTestDbRootNode");
//this query works NOT
XQResultSequence rs = xqe.executeQuery("insert node 'abcdefg' into doc('PATH_TO_MY_XML_FILE')/myTestDbRootNode");
rs.writeSequence(System.out, null);
xqc.close();
}
}
Exception in thread "main" javax.xml.xquery.XQException:
XQJFOS021 - FORWARD_ONLY_SEQUENCE: Cursor is not positioned on an XQItem.
at XmlTestMain.main(XmlTestMain.java:118)