Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java/MySQL-在结果集上进行选择_Java_Mysql_Resultset_Subquery - Fatal编程技术网

Java/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

所以我在MySQL上做了大量的选择,得到了大量的数据,这些数据是按索引排序的。
例如:

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服务器,它比您更好地处理数据。这是基本的想法:-)这是