在Java中执行多个COUNT查询
问题描述:
我有一个MySQL数据库(版本5.2 CE),我有一张表,我想根据用户给出的WHERE条件过滤到另一个表中(这来自一个数组列表)。我想对这个新表执行计数查询,以查看用户选择的分割。例如,COUNT(*)来自TableName WHERE [userConditions,如gender = male和gender = female等]。用户可以提供多个WHERE条件,但COUNT查询一次只能处理一个条件。因此,我让我的方法(执行此查询)一个数组,以根据用户选择的条件数返回多个查询,然后在for循环中执行每个查询。然而,这似乎给了我两种编译错误:i)我在String []方法中返回构建的字符串的方式,以及ii)我执行COUNT查询的方式。对于这些问题的代码:在Java中执行多个COUNT查询
private String countQuery;
public SetupSubsamplePopulation(UserSelectedSplit split) {
this.split = split;
// connect to the database
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql?zeroDateTimeBehavior=convertToNull","root", "sharadha_1992");
String buildSelectQuery = buildSelectQueryForCode();
String getRowsFromTable = getNumberOfRows();
stmt = connection.createStatement();
rows = stmt.executeUpdate(buildSelectQuery);
ResultSet rs = stmt.executeQuery(getRowsFromTable);
for (int i=0; i<getCountOfWhereCondition().length; i++){
//where I get the executeQuery error
ResultSet rs1= stmt.execute(getCountOfWhereCondition());
while (rs1.next()){
rowsCount= rs.getRow();
rows_count++;
}
}
while (rs.next()) {
rows = rs.getRow();
rows_inserted++;
}
System.out.println(rows_inserted);
System.out.println(rows_count);
} catch (Exception e) {
e.printStackTrace();
}
}
返回COUNT查询的阵列的方法:
public String[] getCountOfWhereCondition() {
countQuery="SELECT COUNT (*) FROM (SELECT * from mygrist_samples.subsample_population WHERE ";
for (int i = 0; i < split.getSplitConditions().size(); i++) {
String getCorrespondingCodeFromDatabase = split.getSplitConditions().get(i).getCode();
getCorrespondingCodeFromDatabase = getCorrespondingCodeFromDatabase.replaceAll("-", "_");
Enumerations enum1 = new Enumerations();
String getCorrespondingRelationshipOperator = enum1.getOperator(split.getSplitConditions().get(i).getRelationship());
countQuery+=getCorrespondingCodeFromDatabase + " " + getCorrespondingRelationshipOperator + " '" + split.getSplitConditions().get(i).getAnswer() + "'";
}
countQuery+=")";
System.out.println(countQuery);
//error which doesn't allow me to return a string
return countQuery;
}
可有人请告诉我如何理智地实现这一点?非常感谢你。
答
我想你想有条件的聚集,而不是where
:
select count(*)
from mygrist_samples.subsample_population
WHERE XXX
是一样的:
select sum(case when XXX then 1 else 0 end) as cnt1,
sum(case when yyy then 1 else 0 end) as cnt1
from mygrist_samples.subsample_population
:
现在,你可以在一个调用添加多个条件你能告诉我在代码中的这个实例吗?我的意思是,我怎样才能从arrayList中获取sum参数,即split.getSplitConditions()? – 2013-04-04 22:21:24