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

时间:2012-11-17 17:40:06

标签: java sparql jena virtuoso

我正在尝试使用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       在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)       at com.tcs.ignite.plc.utilities.ContextListener.contextInitialized(ContextListener.java:35)       在org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723)       at org.apache.catalina.core.StandardContext $ 1.call(StandardContext.java:5226)       在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)       at java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:886)       at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:908)       在java.lang.Thread.run(Thread.java:662)

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

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