2011-09-26 2 views
0

다음은 각 폴더의 이름, ID 및 상위 ID가있는 데이터베이스 항목에서 로컬 폴더를 만들기위한 클래스입니다. 내가 할 수있는 한 최선을 다하고 있지만 끝내기에 충분하지는 않습니다.'데이터베이스에서 폴더 만들기'클래스

"그냥 id 0을 가진 폴더를 잡고 디스크에 파일을 작성하기 시작했습니다. folder.getChildren()을 사용하여 트리를 아래로 이동하는 편리한 방법으로 사용하십시오." 다른 게시물이지만 어떻게하고 어디에서해야하는지 이해하지 못합니다. 도와주세요

public class Loop { 

public static void main(String[] args) { 
    int PID = 0; 
    int RepoID = 1; 
    Connection con = null; 
    String url = "jdbc:mysql://localhost/document_manager"; 
    String user = "root"; 
    String password = "Pa55w0rd"; 

    try { 
     con = DriverManager.getConnection(url, user, password); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
    Map<Integer,Folder> data = new HashMap<Integer,Folder>(); 
    while(PID < 50) 
    { 
    try {    
    Statement st = con.createStatement(); 
     ResultSet result = st.executeQuery("SELECT name, category_id, parent_id FROM categories WHERE parent_id = '"+PID+"' AND repository_id = '"+RepoID+"'"); 
     while (result.next()) 
     { 

      String FolderName = result.getString ("name"); 
      String FolderId = result.getString ("category_id"); 
      String ParentId = result.getString ("parent_id"); 
      int intFolderId = Integer.parseInt(FolderId); 
      int intParentId = Integer.parseInt(ParentId); 
      System.out.println(FolderId+" "+FolderName+" "+ParentId); 
      //intFolderId = Integer.valueOf(FolderId); 
      //intParentId = Integer.valueOf(FolderId); 
      Folder newFolder = new Folder(FolderName, intFolderId, intParentId); 
      data.put(newFolder.getId(), newFolder); 
      } 

    } catch (SQLException ex) { 
     System.out.println(ex.getMessage()); 
    } 

    PID++; 

} 
    for(Folder folder : data.values()) { 
     int parentId = folder.getParentFolderId(); 
     Folder parentFolder = data.get(parentId); 
     if(parentFolder != null) 
      parentFolder.addChildFolder(folder); 
     } 
} 
    } 

답변

0

기본적으로 데이터베이스에서 계층 구조를 읽는 것은 쉬운 일이 아니지만 수행 할 수있는 쿼리 당 하나의 수준을 읽는다면 쉽습니다.

  • 을 부모가없는 모든 폴더를 선택, 이미
  • 반복이 존재하지 않는 경우 사람들은
  • 폴더를 만들 루트 폴더입니다 : 당신이해야 할 일은

    는 다음과 더 이상 결과를 얻을 때까지 다음을 수행하십시오.

    • 부모 아이디가 이전 반복 (또는 부모)에서 읽은 폴더의 아이디 인 모든 폴더를 선택하십시오.
    • 이 당신이 폭 우선 접근 방식을 사용할 수 있도록 할

부모의 읽기 하위 폴더를 만들 상위 ID를 기반으로 자신의 부모에게 읽기 하위 폴더를 지정하면 한 단계를 읽어 즉, parent_id를 사용하여 자식을 부모에게 매핑합니다.

하나의 부모에 대해 자식을 읽고 계층 구조를 깊이 우선 반복 할 수 있습니다.

+0

문제는 개체를 선택하는 방법을 알지 못합니다 ('0'ID를 가진 개체, 내가 자식과 mkDirs를 모든 자식에게 추가 할 수있는 경우) .. – WookooUK

+0

@ user961574 문제를 이해할 수 있는지 모르겠지만'SELECT ... FROM categories where parent_id IS NULL ...'(아니면'... WHERE parent_id = 0 ...')? – Thomas

+0

때문에 그것은 이미 완료되었습니다. 데이터베이스의 모든 결과가 객체로 만들어졌으며 올바른 순서로 연결되어 있습니다. 객체의 ID가 0 인 객체를 선택하고 자식을 가져오고 디렉토리를 생성 할 수 있어야합니다. – WookooUK