Java 如何使用jena执行Sparql delete查询?
我试图使用Jena执行删除查询,但执行时出错。我试过两种方法,但在这两种情况下,我都得到了相同的错误。我使用的是jena 2.7.3和database virtuoso 6.01.3 代码1: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
字符串查询字符串;//删除查询。
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端失败