简体   繁体   中英

How to execute Sparql delete query using jena?

I'm trying to execute a delete query using Jena, but I'm getting an error while executing it. I've tried two ways, but in both cases, I'm getting the same error. I'm using jena 2.7.3 and database virtuoso 6.01.3.

Code 1:

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

Code 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);

Error:

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) at com.hp.hpl.jena.sparql.modify.UpdateEngineWorker.visit(UpdateEngineWorker.java:348) at 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) at com.hp.hpl.jena.update.UpdateAction.execute(UpdateAction.java:283) at com.hp.hpl.jena.update.UpdateAction.execute(UpdateAction.java:237) at 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) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPo olExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662)

Does anyone know why I'm getting this error?

The comment reference is to OWLIM, not Virtuoso. The cause is the same though - bad mix of versions. You need to find out which version of Jena to use with database virtuoso 6.01.3.

An alternative is to run the Virtuoso database as a server and connect to it over the SPARQL protocol. Then the version of Jena (the SPARQL protocol client) is not tied to the version sync'ed to Virtuoso.

Use the next code for send your query directly to Virtuoso server without using any Jena SPARQL parsers/executors.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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