下面是一个用于从数据库条目创建本地文件夹的类,其中每个文件夹都有一个名称,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);
}
}
}
答案 0 :(得分:0)
基本上从数据库中读取层次结构并不简单,但是如果每个查询都读取一个应该可行的层次。
您需要做的是:
这将允许您使用广度优先的方法,即您每次迭代读取一个级别的文件夹,并使用parent_id将子映射到父级。
作为替代方案,您可以读取单个父项的子项,并以深度优先的方式遍历层次结构。