0

MySQL データベース (バージョン 5.2 CE) があり、ユーザーが指定した WHERE 条件に基づいて別のテーブルにフィルター処理するテーブルがあります (これは配列リストから取得されます)。ユーザーが選択した分割に対して、この新しいテーブルでカウント クエリを実行したいと考えています。たとえば、TableName WHERE [性別 = 男性、性別 = 女性などのユーザー条件] の COUNT(*) です。ユーザーは複数の WHERE 条件を指定できますが、COUNT クエリは一度に 1 つの条件のみを使用します。したがって、(このクエリを実行する) メソッドを配列にして、ユーザーが選択した条件の数に基づいて複数のクエリを返し、各クエリを for ループで実行します。ただし、これにより、次の 2 つの方法でコンパイル エラーが発生するようです。i) String[] メソッドで構築された文字列を返す方法と、ii) 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;


}

誰かがこれを賢明に実装する方法を教えてもらえますか? どうもありがとうございました。

4

1 に答える 1