如何在Apache Jena中保存记录?
我想创建一个昵称为jd
的人,并在持久的Apache Jena数据库中通过电子邮件john.doe@provider.com
创建。
我写了下面的代码:
var dataSet:Dataset? = null val Dir = "data/MyDataSet" dataSet = TDBFactory.createDataset(Dir) dataSet.begin(ReadWrite.WRITE) val model = dataSet.defaultModel createPerson("john.doe@provider.com", model, "jd") dataSet.end() dataSet.close() private fun createPerson(email: String, model: Model, nick: String) { val uuid = UUID.randomUUID() val uri = "http://mycompany.com/data/p-${uuid}" val person = model.createResource(uri) person.addProperty(VCARD.EMAIL, email) person.addProperty(VCARD.N, model.createResource() .addProperty(VCARD.NICKNAME, nick)) }
当我运行它,我没有得到任何错误。
但是,当我尝试从文件中读取数据(请参阅下面的代码),查询没有找到任何东西。
ds.begin(ReadWrite.READ) val query = QueryFactory.create("""SELECT ?x WHERE { ?x <http://www.w3.org/2001/vcard-rdf/3.0#EMAIL> "john.doe@provider.com" }""") val qexec: QueryExecution try { qexec = QueryExecutionFactory.create(query, ds.defaultModel) val rs = qexec.execSelect() while (rs.hasNext()) { val solution = rs.nextSolution() System.out.println("") } } catch (throwable:Throwable) { logger.error("", throwable) } finally { ds.end() }
我的代码有什么问题?
你最后应该得到一个警告,因为你没有提交交易。
dataSet.begin(ReadWrite.WRITE) val model = dataSet.defaultModel createPerson("john.doe@provider.com", model, "jd") dataSet.commit() dataSet.end()