2013-04-17 1 views
2

다음 클래스의 ClearModel() 메소드를 사용하여 모델에 입력 한 모든 데이터를 제거하려고합니다.Apache Jena : 모델의 모든 데이터 삭제

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(); 
    } 
} 

그러나 응용 프로그램을 다시 시작하고 명령문을 반복 할 때 아무 것도 제거되지 않았습니다.

+0

'Model.removeAll()'과'Statement.remove()'는 모두 Jena 단위 테스트에서 광범위하게 테스트되었으므로 확실히 작동합니다. 문제가 무엇인지 진단하려면 정확한 설정에 대한 세부 정보가 필요합니다. 모델에 아직 데이터가 있는지 어떻게 알 수 있습니까? –

+0

나는 가득 차있는 종류로 질문을 새롭게했다. TDB를 사용하여 모델을 저장하지만 Model.removeAll()이 여전히 작동하지 않아야합니까? ClearModel() 메서드를 사용한 후 응용 프로그램을 다시 시작할 때 데이터가 그대로 남아 있고 변경된 내용이없는 것을 반복합니다. – Matt

답변

1

model이 null 인 경우 ClearModel은 아무 것도하지 않습니다. 이 경우 경고를 출력하려면 해당 조건부에 else 분기를 넣을 수 있습니다. 예를 들어, 새 JenaDatabaseHelper 인스턴스를 만들고 getJenaModel()을 호출하여 인스턴스 변수를 먼저 초기화하지 않으면이 문제가 발생할 수 있습니다.

실제로 초기화되지 않은 변수가있을 위험이 있으므로 개인적으로 나는 getJenaModel의 기능을 생성자에 넣습니다. 또는 model에 게터 메소드를 통해 액세스하여 느리게 평가할 수 있습니다. 그러면 처음에는 model이 초기화되었는지 확인합니다.

+0

당신이 옳았다는 것이 더 복잡한 문제라고 생각했지만, 모델이 null이라는 사실을 간과했습니다. 도와 주셔서 감사합니다 :) – Matt

관련 문제