我正在尝试使用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)
有谁知道我为什么会收到这个错误?
答案 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();