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