【发布时间】:2016-07-10 00:02:48
【问题描述】:
我有一些我用 Tasks 为学校创建的数据库。每个任务记录都有用户名、描述、任务日、任务小时列。
我想按两个值提取记录:taskhour 和 taskday 或单独一个。
所以我有一个函数来获取任务对象并检查任务日或任务小时是否为空并相应地准备查询。但由于某种原因,ResultSet 出了点问题……这是我的功能:
public List<Task> getUserTasks(Task task) throws SQLException {
List<Task> listOfTasks = new ArrayList<>();
try {
String query = "";
PreparedStatement pStatement;
if (task.getDay() != 0 && task.getHour() != 0) {
query = "select * from TASKS where USERNAME=? and TASKDAY=? and TASKHOUR=?";
pStatement = connection.prepareStatement(query);
pStatement.setString(1, task.getUsername());
pStatement.setInt(2, task.getDay());
pStatement.setInt(3, task.getHour());
} else if (task.getDay() == 0) {
query = "select * from TASKS where USERNAME=? and TASKHOUR=?";
pStatement = connection.prepareStatement(query);
pStatement.setString(1, task.getUsername());
pStatement.setInt(2, task.getHour());
} else {
query = "select * from TASKS where USERNAME=? and TASKDAY=?";
pStatement = connection.prepareStatement(query);
pStatement.setString(1, task.getUsername());
pStatement.setInt(2, task.getDay());
}
ResultSet rs;
rs = pStatement.executeQuery();
if (rs.next()) {
Task taskToAdd = new Task();
taskToAdd.setUsername(rs.getString("USERNAME"));
taskToAdd.setDescription(rs.getString("DESCRIPTION"));
taskToAdd.setDay(rs.getInt("TASKDAY"));
taskToAdd.setHour(rs.getInt("TASKHOUR"));
listOfTasks.add(taskToAdd);
}
} catch (SQLException ex) {
ex.printStackTrace();
}
return listOfTasks;
}
我做错了吗?
谢谢!
【问题讨论】:
-
"...ResultSet 出了点问题..." 您必须比这更具体。 什么 ResultSet 有问题?
-
我怀疑问题是返回的 ArrayList 最多包含一行。我怀疑你想要
while (rs.next())。使用while形成一个循环,重复这些动作,直到没有更多行可以检索。 (我仍然支持我之前回答中的所有建议,尤其是在finally块中结束声明。)
标签: java mysql sql prepared-statement resultset