私はTasksで学校用に作成したデータベースをいくつか持っています。各タスクレコードには、ユーザー名、説明、タスク日、タスク時間の列があります。SQLの実行からResultSetが正しく取得される
私はレコードを2つの値、つまりタスク時間とタスク日またはそれぞれ個別にプルしたいと考えています。
私はタスクオブジェクトを取得し、taskdayまたはtaskhourが空であるかどうかをチェックし、それに応じてクエリを準備する関数を持っています。しかし、いくつかの理由から、何かが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が多くても1つの行を含むことが問題だと思う。私はあなたが** '(rs.next())' **を望んでいると思う。ループを形成するには 'while'を使います。したがって、取り出す行がなくなるまでアクションは繰り返されます。 (私はまだ私の以前の答え、特にfinallyブロックの文を閉じることですべての提案をしています) – spencer7593