如果在 table (SQLite) 中没有记录,使用 JDBC 通过检查 resultSet 将 0 放入 arraylist

Put 0 in arraylist if no record in table (SQLite) using JDBC by checking resultSet

我知道同一标题有类似的讨论帖,但我的问题针对的是不同的问题。我正在检查结果集以查看

是否查询 returns 来自 rating 列的任何值 如果是,则取值并将其添加到 arraylist 如果没有,则将 0.0 添加到 arraylist (收视率)

在我的代码中,else 永远不会被执行,导致数组列表中没有 0.0(对于缺少日期)。我的查询是不是哪里出错了?请帮忙。

String query = "SELECT * FROM DATA WHERE (dateofday BETWEEN ? AND ?) AND id = ?";
    String mediapath = null;
    try {
        preparedStatement = connection.prepareStatement(query);
        preparedStatement.setInt(3, Controller.id_logged_in);
        preparedStatement.setString(1, datepickerfrom.getValue().toString());
        preparedStatement.setString(2, datepickerto.getValue().toString());
        resultSet = preparedStatement.executeQuery();
        boolean flag = true;
        if (resultSet.next()) {
            do {
                ratings.add(resultSet.getFloat("rating"));
                countofday++;
            }
            while (resultSet.next());
        } else {
            ratings.add(Float.valueOf(0));
        }

    } catch (SQLException e) {
        e.printStackTrace();
    }finally {
        connection.close();
    }

这里:

if (resultSet.next()) {
    do {
        ratings.add(resultSet.getFloat("rating"));
        countofday++;
    }
    while (resultSet.next());
} else {
    ratings.add(Float.valueOf(0));
}

如果您在 resultSet 中至少有一个结果,您将遍历所有结果,但您永远不会输入 ratings.add(Float.valueOf(0)); 因为只有在没有结果时才输入。

应删除第一个条件语句:if (resultSet.next()) {
您应该测试 resultSet.getFloat("rating").
返回的值 如果它不为空,则执行 ratings.add(resultSet.getFloat("rating")); 否则执行 ratings.add(Float.valueOf(0));.

例如:

while (resultSet.next());
    float ratingObj = resultSet.getFloat("rating");
    if (!resultSet.wasNull()){
       ratings.add(ratingObj);
       countofday++;
    }
    else{
       ratings.add(Float.valueOf(0));
    }
}

暂时,我通过查询每个日期来使用这种低效方式。别无选择。

    SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd");
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
    String date1 = datepickerfrom.getValue().toString();
    String date2 = datepickerto.getValue().toString();
    try {
        Date d1 = myFormat.parse(date1);
        Date d2 = myFormat.parse(date2);

        while( d1.before(d2) ){
            d1 = addDays(d1, 1);
            allDates.add(d1);
            allDatesString.add(formatter.format(d1));
        }
        //System.out.println(allDatesString);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    for(int i = 0; i < allDatesString.size(); i++) {
        String query = "SELECT * FROM DATA WHERE dateofday  = ? AND id = ?";
        try {
            preparedStatement = connection.prepareStatement(query);
            preparedStatement.setInt(2, Controller.id_logged_in);
            preparedStatement.setString(1, allDatesString.get(i));
            resultSet = preparedStatement.executeQuery();
            if(resultSet.next())
                ratings.add(resultSet.getFloat("rating"));
            else
                ratings.add(Float.valueOf(0));
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

它给出:

[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.505962, 0.0, 0.0, 0.0, 0.0, 7.734242, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 9.67128, 0.0, 5.054585, 0.0, 0.0, 0.0]