MySQL-Java-如何从多个查询中检索结果

MySQL-Java-如何从多个查询中检索结果,java,mysql,Java,Mysql,我已经在下面和其他一些帖子中找到了如何运行多个查询的方法。我现在被困在如何存储结果以便返回它们上 我从上面的帖子中知道答案是: 您必须使用execute(字符串sql)或其其他变体来获取查询执行的结果 布尔hasMoreResultSets=stmt.execute(multiQuerySqlString); 要遍历和处理结果,需要执行以下步骤: READING_QUERY_RESULTS: // label while ( hasMoreResultSets || stmt.get

我已经在下面和其他一些帖子中找到了如何运行多个查询的方法。我现在被困在如何存储结果以便返回它们上

我从上面的帖子中知道答案是:

您必须使用execute(字符串sql)或其其他变体来获取查询执行的结果

布尔hasMoreResultSets=stmt.execute(multiQuerySqlString); 要遍历和处理结果,需要执行以下步骤:

READING_QUERY_RESULTS: // label  
    while ( hasMoreResultSets || stmt.getUpdateCount() != -1 ) {  
        if ( hasMoreResultSets ) {  
            Resultset rs = stmt.getResultSet();
            // handle your rs here
        } // if has rs
        else { // if ddl/dml/...
            int queryResult = stmt.getUpdateCount();  
            if ( queryResult == -1 ) { // no more queries processed  
                break READING_QUERY_RESULTS;  
            } // no more queries processed  
            // handle success, failure, generated keys, etc here
        } // if ddl/dml/...

        // check to continue in the loop  
        hasMoreResultSets = stmt.getMoreResults();  
    } // while results
但是,我无法确定如何将此示例应用于我的代码(以下代码没有返回错误;我只是没有得到返回的查询结果):

我尝试了以下方法:

//              ResultSet result = ps.executeQuery();
//
//              while (result.next()) {
//                  packSummary = new PackSummary(result.getInt(1), result.getInt(2), null, null, null, null, null, null, null, null);
//              }

                boolean hasMoreResultSets = ps.execute( selectQry );

                READING_QUERY_RESULTS: // label  
                    while ( hasMoreResultSets || ps.getUpdateCount() != -1 ) {  
                        if ( hasMoreResultSets ) {  
                            ResultSet rs = ps.getResultSet();
                            packSummary = new PackSummary(rs.getInt(1), rs.getInt(2), null, null, null, null, null, null, null, null);
                        } // if has rs
                        else { // if ddl/dml/...
                            int queryResult = ps.getUpdateCount();  
                            if ( queryResult == -1 ) { // no more queries processed  
                                break READING_QUERY_RESULTS;  
                            } // no more queries processed  
                            // handle success, failure, generated keys, etc here
                        } // if ddl/dml/...

                        // check to continue in the loop  
                        hasMoreResultSets = ps.getMoreResults();  
                    } // while results
但是,变量不再被传递(它们在前面的代码中,没有返回SQL错误),我得到了错误:

SQLException in getPackSummary: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server  version for the right syntax to use near '?   AND at_cub_details.cd_id = at_cub_awards.cd_id   AND at_cub_awards.aw_id = a' at line 1
非常感谢你的帮助

问候,


Glyn

您正在将两个select-SQL语句组合在一个语句中,Java/SQL不能这样工作。它可能适用于不选择任何内容的语句

您可以选择进行两个不同的查询(一个用于Bronze,一个用于Silver),或者重写查询以返回所有结果,然后遍历
ResultSet
。我已经提供了一个重新连接查询的示例,以避免多次来回查询

String selectQry = ("SELECT at_award.aw_award_name as award_name, COUNT(at_cub_awards.ca_id) as award_count" +
    "FROM at_cub_details, at_cub_awards, at_award " + 
    "WHERE at_cub_details.grp_id = ? " +
    "  AND at_cub_details.cd_id = at_cub_awards.cd_id " +
    "  AND at_cub_awards.aw_id = at_award.aw_id " +
    "  AND (at_award.aw_award_name LIKE '%Bronze Boomerang%' or " +
    "       at_award.aw_award_name LIKE '%Silver Boomerang%') " +
    "GROUP BY at_award.aw_award_type";
或者,如果您可以像一样删除
并进行精确匹配,这可能会更快:

String selectQry = ("SELECT at_award.aw_award_name as award_name, COUNT(at_cub_awards.ca_id) as award_count" +
    "FROM at_cub_details, at_cub_awards, at_award " + 
    "WHERE at_cub_details.grp_id = ? " +
    "  AND at_cub_details.cd_id = at_cub_awards.cd_id " +
    "  AND at_cub_awards.aw_id = at_award.aw_id " +
    "  AND (at_award.aw_award_name in ('Bronze Boomerang', 'Silver Boomerang') " +
    "GROUP BY at_award.aw_award_type";
然后,在Java中:

ResultSet result = ps.executeQuery();
while (result.next()) {
    System.out.println("Award: " + rs.getString("award_name"));
    System.out.println("Count: " + rs.getInt("award_count"));
}       

还有一个建议是不要使用列号来获取查询结果,而是使用列名。

多亏了Todd,我才跳出来返回一行,因为我还有来自不同表的数据要返回。我想我需要返回多行,并使用“UNION”代替。我会试试这个,然后给你答案。我非常感谢你的建议和帮助。你好,格林。谢谢,托德,我特别喜欢你的建议,使用列名来获取查询结果。你好,格林
ResultSet result = ps.executeQuery();
while (result.next()) {
    System.out.println("Award: " + rs.getString("award_name"));
    System.out.println("Count: " + rs.getInt("award_count"));
}