繁体   English   中英

如何使用 jena 执行 Sparql 删除查询?

[英]How to execute Sparql delete query using jena?

我正在尝试使用 Jena 执行删除查询,但在执行时出现错误。 我尝试了两种方法,但在这两种情况下,我都遇到了相同的错误。 我正在使用 jena 2.7.3 和数据库 virtuoso 6.01.3。

代码 1:

String queryString; // deleteQuery.
Model m = VirtModel.openDatabaseModel(file, connectionURL, username, password); 
UpdateAction.parseExecute(queryString, m);

代码 2:

String queryString; // deleteQuery
Model m = VirtModel.openDatabaseModel(file, connectionURL, username, password); 
GraphStore gs = GraphStoreFactory.create();
gs.setDefaultGraph(m.getGraph());            
UpdateRequest ur = UpdateFactory.create(queryString);            
UpdateAction.execute(ur.getOperations().get(0),gs);

错误:

java.lang.InstantiationError: com.hp.hpl.jena.sparql.engine.binding.BindingMap at virtuoso.jena.driver.VirtuosoQueryEngine$VQueryIterator.extractRow(Unknown Source) at virtuoso.jena.driver.VirtuosoQueryEngine$VQueryIterator.moveForward( Unknown Source) at virtuoso.jena.driver.VirtuosoQueryEngine$VQueryIterator.hasNextBinding(Unknown Source) at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:108) at com.hp.hpl .jena.sparql.engine.iterator.QueryIteratorWrapper.hasNextBinding(QueryIteratorWrapper.java:40) at com.hp.hpl.jena.sparql.engine.iterator.QueryIteratorBase.hasNext(QueryIteratorBase.java:108) at 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) at com.hp.hpl.jena.sparql.modify.UpdateEngineMain.execute(UpdateEngineMain.java:40) at com.hp.hpl.jena.sparql.modi fy.UpdateProcessorBase.execute(UpdateProcessorBase.java:56) at com.hp.hpl.jena.update.UpdateAction.execute$(UpdateAction.java:330) at 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) at com.tcs.ignite.plc.utilities.ContextListener.contextInitialized(ContextListener.java:35) at org.apache.catalina.core.StandardContext。 listenerStart(StandardContext.java:4723) at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226) at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221) at 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.ThreadPo olExecutor$Worker.run(ThreadPoolExecutor.java:908) 在 java.lang.Thread.run(Thread.java:662)

有谁知道我为什么会收到这个错误?

评论参考是 OWLIM,而不是 Virtuoso。 原因是一样的 - 版本混合不好。 您需要找出与数据库 virtuoso 6.01.3 一起使用的 Jena 版本。

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

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

String queryString; // deleteQuery
Model m = VirtModel.openDatabaseModel(file, connectionURL, username, password); 
VirtuosoUpdateRequest vur = VirtuosoUpdateFactory.create(str, m);
vur.exec();  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM