Java ApacheJena:删除模型中的所有数据
我正在尝试使用以下类中的ClearModel()方法删除输入到模型中的所有数据Java ApacheJena:删除模型中的所有数据,java,jena,Java,Jena,我正在尝试使用以下类中的ClearModel()方法删除输入到模型中的所有数据 public class JenaDatabaseHelper { private Model model; private Dataset dataset; public Model getJenaModel(){ if(model!=null){ return model; } else{ String directory = "JenaData
public class JenaDatabaseHelper {
private Model model;
private Dataset dataset;
public Model getJenaModel(){
if(model!=null){
return model;
}
else{
String directory = "JenaDatabase" ;
try{
dataset = TDBFactory.createDataset(directory);
model = dataset.getNamedModel("DB");
return model;
}catch(Exception e){
System.out.println("Error when retrieving model: "+e.getMessage());
}
}
return null;
}
public void SaveAndCloseModel(){
if(model!=null && dataset!=null){
model.commit();
model.close();
dataset.close();
}
}
public void ClearModel(){
if(model!=null && dataset!=null){
model.removeAll();
SaveAndCloseModel();
}
}
但是,当我重新启动应用程序并遍历语句时,没有任何内容被删除。我注意到,如果
model
为null,则ClearModel
将不执行任何操作。在这种情况下,您可能希望在该条件上放置一个else分支以打印警告。例如,如果您创建一个新的jenadatabaseheloper
实例,而不调用getJenaModel()
首先初始化实例变量,则可能会发生这种情况
事实上,考虑到存在未初始化变量的风险,我个人会将
getJenaModel
的功能放入构造函数中。或者,您可以通过getter方法访问模型来惰性地评估它们,该方法首先检查模型是否已初始化。model.removeAll()
和Statement.remove()
都在Jena单元测试中进行了广泛的测试,因此它们肯定有效。我们需要您的确切设置的更多详细信息来诊断您的问题。你怎么知道模型中还有数据?我已经用全班同学更新了这个问题。我正在使用TDB保存模型,但是model.removeAll()是否仍然有效?我知道当我重新启动应用程序(在使用ClearModel()方法之后)并遍历语句时,数据仍然存在。你是对的,我认为这是一个更复杂的问题,但我忽略了模型为空的事实。谢谢你的帮助:)