2011-09-26 7 views
0

以下は、各フォルダに名前、ID、および親IDがあるデータベースエントリからローカルフォルダを作成するためのクラスです。 私はできる限り最善の方法でそれをまとめましたが、それを終了するのに十分なことは分かりません。 「木を下に移動する便利な方法としてだけでIDが0でフォルダをつかむとfolder.getChildrenを(使用して、ディスク上のファイルの作成を開始)そしてちょうどmkdirs()」「データベースからフォルダを作る」クラス

私はする必要が

に私に語ったとして別の投稿がありますが、どうやってやるのか分かりません。

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

は、基本的には、データベースからhierachiesはを読んだことは容易ではありませんが、あなたは、クエリごとに1つのレベルを読めばなんとかすべきことであるが、助けてください。あなたがする必要がどのような

は以下の通りです:

  • が親を持たないすべてのフォルダを選択し、それらはあなたのルートフォルダ
  • あり、彼らはすでに
  • 繰り返し存在しない場合、フォルダを作成しますこれ以上の結果が得られなくなるまで続ける
    • 前回の反復で読み込まれたフォルダのIDが親IDであるすべてのフォルダを選択する
    • これは、あなたが幅優先のアプローチを使用することができるようになる

両親に読み取りサブフォルダを作成し、あなたが1つのレベルを読んすなわち親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

    関連する問題