Java 如何使用jena执行Sparql delete查询?

Java 如何使用jena执行Sparql delete查询?,java,sparql,jena,virtuoso,Java,Sparql,Jena,Virtuoso,我试图使用Jena执行删除查询,但执行时出错。我试过两种方法,但在这两种情况下,我都得到了相同的错误。我使用的是jena 2.7.3和database virtuoso 6.01.3 代码1: 字符串查询字符串;//删除查询。 Model m=VirtModel.openDatabaseModel(文件、连接URL、用户名、密码); parseExecute(queryString,m); 代码2: 字符串查询字符串;//删除查询 Model m=VirtModel.openDatabaseM

我试图使用Jena执行删除查询,但执行时出错。我试过两种方法,但在这两种情况下,我都得到了相同的错误。我使用的是jena 2.7.3和database virtuoso 6.01.3

代码1:

字符串查询字符串;//删除查询。
Model m=VirtModel.openDatabaseModel(文件、连接URL、用户名、密码);
parseExecute(queryString,m);
代码2:

字符串查询字符串;//删除查询
Model m=VirtModel.openDatabaseModel(文件、连接URL、用户名、密码);
GraphStore gs=GraphStoreFactory.create();
setDefaultGraph(m.getGraph());
UpdateRequest ur=UpdateFactory.create(queryString);
UpdateAction.execute(ur.getOperations().get(0),gs);
错误:

java.lang.实例化错误:com.hp.hpl.jena.sparql.engine.binding.BindingMap 位于virtuoso.jena.driver.VirtuosoQueryEngine$VQueryIterator.extractRow(未知源) 位于virtuoso.jena.driver.VirtuosoQueryEngine$VQueryIterator.moveForward(未知源) 在virtuoso.jena.driver.VirtuosoQueryEngine$VQueryIterator.hasNextBinding(未知来源) 位于com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:108) 位于com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:40) 位于com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:108) 位于org.openjena.atlas.data.AbstractDataBag.addAll(AbstractDataBag.java:74) 访问com.hp.hpl.jena.sparql.modify.UpdateEngineWorker.visit(UpdateEngineWorker.java:348) 访问com.hp.hpl.jena.sparql.modify.request.UpdateModify.visit(UpdateModify.java:97) 在com.hp.hpl.jena.sparql.modify.UpdateEngineMain.execute(UpdateEngineMain.java:40) 在com.hp.hpl.jena.sparql.modify.UpdateProcessorBase.execute(UpdateProcessorBase.java:56)上 位于com.hp.hpl.jena.update.UpdateAction.execute$(UpdateAction.java:330) 在com.hp.hpl.jena.update.UpdateAction.execute上(UpdateAction.java:323) 在com.hp.hpl.jena.update.UpdateAction.execute上(UpdateAction.java:283) 在com.hp.hpl.jena.update.UpdateAction.execute上(UpdateAction.java:237) 在com.tcs.ignite.plc.DAOs.ConceptDAO.deleteConceptByURI(ConceptDAO.java:75)上 位于com.tcs.ignite.plc.utilities.ContextListener.contextInitialized(ContextListener.java:35) 位于org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723) 位于org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226) 位于org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221) 位于java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 位于java.util.concurrent.FutureTask.run(FutureTask.java:138) 位于java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 运行(Thread.java:662)


有人知道我为什么会出现这个错误吗?

评论引用的是OWLIM,而不是Virtuoso。原因是相同的,尽管版本混合不好。您需要找出与数据库virtuoso 6.01.3一起使用的Jena版本


另一种方法是将Virtuoso数据库作为服务器运行,并通过SPARQL协议连接到它。然后,Jena(SPARQL协议客户端)的版本与同步到Virtuoso的版本没有关联。

使用下一个代码直接将查询发送到Virtuoso服务器,而不使用任何Jena SPARQL解析器/执行器

字符串查询字符串;//删除查询
Model m=VirtModel.openDatabaseModel(文件、连接URL、用户名、密码);
virtuosupdaterequest vur=virtuosupdatefactory.create(str,m);
vur.exec();

注释引用的是OWLIM,而不是Virtuoso。第二个建议的唯一缺点是Virtuoso尚未正确支持所有SPARQL 1.1更新,因此根据您发送的命令,它们可能会在Virtuoso端失败