Java/MySQL-在结果集上进行选择
所以我在MySQL上做了大量的选择,得到了大量的数据,这些数据是按索引排序的。Java/MySQL-在结果集上进行选择,java,mysql,resultset,subquery,Java,Mysql,Resultset,Subquery,所以我在MySQL上做了大量的选择,得到了大量的数据,这些数据是按索引排序的。 例如: select * from nodes where config_id = 1; 给出(仅显示相关性) |定义| id(PK)|位置|父项| ------------------------------------------- 90 1 0我不知道在结果集上进行子选择的方法。如果您想保留一个查询,可以使用以下方法在内存中管理所有查询: // class to represent your rows c
例如:
select * from nodes where config_id = 1;
给出(仅显示相关性)
|定义| id(PK)|位置|父项|
-------------------------------------------
90 1 0我不知道在结果集上进行子选择的方法。如果您想保留一个查询,可以使用以下方法在内存中管理所有查询:
// class to represent your rows
class Row {
int definitionId;
int position;
int parent;
}
// map of parents to list of their rows
Map<Integer, List<Row>> parentMap = new HashMap<Integer, List<Row>>();
// iterate over all results, build row objects and populate the map
while (rs.next()) {
Row row = new Row();
row.definitionId = rs.getInt("definition_id");
row.position = rs.getInt("position");
row.parent = rs.getInt("parent");
// find the list of rows for the parent, create it if it doesn't exist
List<Row> rows = parentMap.get(row.parent);
if (rows == null) {
rows = new ArrayList<Row>();
parentMap.put(row.parent, rows);
}
// add row to the list for its parent
rows.add(row);
}
// find all rows for parent == 7
for (Row row : parentMap.get(7)) {
// process row
}
//用于表示行的类
班级排{
int定义id;
内部位置;
int父代;
}
//将父对象映射到其行列表
Map parentMap=new HashMap();
//迭代所有结果,构建行对象并填充地图
while(rs.next()){
行=新行();
row.definitionId=rs.getInt(“定义id”);
row.position=rs.getInt(“位置”);
row.parent=rs.getInt(“parent”);
//查找父级的行列表,如果不存在,则创建它
List rows=parentMap.get(row.parent);
if(行==null){
行=新的ArrayList();
parentMap.put(row.parent,rows);
}
//将行添加到其父行的列表中
行。添加(行);
}
//查找父==7的所有行
for(行:parentMap.get(7)){
//进程行
}
我不知道如何在结果集上进行子选择。如果您想保留一个查询,可以使用以下方法在内存中管理所有查询:
// class to represent your rows
class Row {
int definitionId;
int position;
int parent;
}
// map of parents to list of their rows
Map<Integer, List<Row>> parentMap = new HashMap<Integer, List<Row>>();
// iterate over all results, build row objects and populate the map
while (rs.next()) {
Row row = new Row();
row.definitionId = rs.getInt("definition_id");
row.position = rs.getInt("position");
row.parent = rs.getInt("parent");
// find the list of rows for the parent, create it if it doesn't exist
List<Row> rows = parentMap.get(row.parent);
if (rows == null) {
rows = new ArrayList<Row>();
parentMap.put(row.parent, rows);
}
// add row to the list for its parent
rows.add(row);
}
// find all rows for parent == 7
for (Row row : parentMap.get(7)) {
// process row
}
//用于表示行的类
班级排{
int定义id;
内部位置;
int父代;
}
//将父对象映射到其行列表
Map parentMap=new HashMap();
//迭代所有结果,构建行对象并填充地图
while(rs.next()){
行=新行();
row.definitionId=rs.getInt(“定义id”);
row.position=rs.getInt(“位置”);
row.parent=rs.getInt(“parent”);
//查找父级的行列表,如果不存在,则创建它
List rows=parentMap.get(row.parent);
if(行==null){
行=新的ArrayList();
parentMap.put(row.parent,rows);
}
//将行添加到其父行的列表中
行。添加(行);
}
//查找父==7的所有行
for(行:parentMap.get(7)){
//进程行
}
您可以在DBMS级别执行此操作,例如在MySQL上
WhiteFang34的答案很好,因为mySQL不支持分层查询(您可以在ORACLE中找到它:start…connectby
)。也许它将在将来实现,但现在我们只能使用变通方法(比如on-link)。基本思想是在运行DBMS和由供应商实现递归查询(具有优化、强算法、支持等)的机器上使用内存
另一个解决方法是编写存储过程。您可以在DBMS级别上完成,例如在MySQL上
WhiteFang34的答案很好,因为mySQL不支持分层查询(您可以在ORACLE中找到它:start…connectby
)。也许它将在将来实现,但现在我们只能使用变通方法(比如on-link)。基本思想是在运行DBMS和由供应商实现递归查询(具有优化、强算法、支持等)的机器上使用内存
另外的解决方法是编写存储过程。您可以在临时表中进行第一次选择
然后在临时表上进行二次选择。临时表是“每个连接”的,因此这可能对您有效,也可能不适用。您可以在临时表中进行第一次选择
然后在临时表上进行二次选择。临时表是“每个连接”的,因此这可能适用于您,也可能不适用于您。我们在我的工作中也做了类似的事情。我们使用oracle有一个优势,因此“从…连接开始”语法是一件好事。但是,我们只使用它来加载到内存中的数据结构中,该结构支持树型函数,如get_children、get SIBLINES、get parents等
我更倾向于使用db来加载一些支持这些函数类型的对象。我对java不太在行,所以我不确定它的实现,但希望这能让您开始学习。我们在我的工作中也做了类似的事情。我们使用oracle有一个优势,因此“从…连接开始”语法是一件好事。但是,我们只使用它来加载到内存中的数据结构中,该结构支持树型函数,如get_children、get SIBLINES、get parents等
我更倾向于使用db来加载一些支持这些函数类型的对象。我对java不太在行,所以我不确定它的实现,但希望这能让您开始。非常棒-谢谢-这两者的结合让我的生活变得轻松多了+1和辉煌-谢谢-这和以上的组合让我的生活变得轻松多了+1和谢谢-但在它面前坚持解释差点让我心脏病发作。你能详细介绍一下优化吗?我不知道什么样的优化方法可以应用在MySQL DMB上。我的经验通常基于ORACLE。例如,在ORACLE中,可以使用递归查询来解决问题。可能您可以在MySQL中编写存储过程来加载DBMS服务器并发布java app server。所以,这种方法适用于DBMS服务器,它比您更好地处理数据。这是一个基本的想法:-)。谢谢。但是当我站在它前面的时候,差点让我心脏病发作。你能详细介绍一下优化吗?我不知道什么样的优化方法可以应用在MySQL DMB上。我的经验通常基于ORACLE。例如,在ORACLE中,可以使用递归查询来解决问题。可能您可以在MySQL中编写存储过程来加载DBMS服务器并发布java app server。所以,这种方法适用于DBMS服务器,它比您更好地处理数据。这是基本的想法:-)这是