如果在 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]
我知道同一标题有类似的讨论帖,但我的问题针对的是不同的问题。我正在检查结果集以查看
是否查询 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]