完成我的'从数据库创建文件夹'类

时间:2011-09-26 08:41:53

标签: java mysql

下面是一个用于从数据库条目创建本地文件夹的类,其中每个文件夹都有一个名称,id和parent-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);
        }
} 
   }

1 个答案:

答案 0 :(得分:0)

基本上从数据库中读取层次结构并不简单,但是如果每个查询都读取一个应该可行的层次。

您需要做的是:

  • 选择所有没有父文件夹的文件夹,这些文件夹是您的根文件夹
  • 创建文件夹(如果它们不存在)
  • 重复以下操作,直到您没有从db
  • 获得更多结果
    • 选择其父ID为上一次迭代(或父项)中读取的文件夹ID的所有文件夹
    • 根据父ID
    • 将read子文件夹分配给其父项
    • 在父母中创建阅读子文件夹

这将允许您使用广度优先的方法,即您每次迭代读取一个级别的文件夹,并使用parent_id将子映射到父级。

作为替代方案,您可以读取单个父项的子项,并以深度优先的方式遍历层次结构。