Я использую базу данных SQLite с сервлетами java для своего приложения для кино.
У меня есть DAO, который общается с БД. После выполнения запроса на выборку к базе данных, случайная строка удаляется.
Вот метод, который дает мне список проекций, основанный на mov ie, но каким-то образом удаляет строку в таблице при каждом вызове. (Он всегда удаляет строку сверху и после этого случайные строки).
public static List<Projection> getAllByMovie(Integer movie_id) {
List<Projection> projections = new ArrayList<>();
Connection con = ConnectionManager.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
try {
String query = "SELECT * FROM projections WHERE movie = ? AND dateandtime >= '2020-02-11'";
ps = con.prepareStatement(query);
ps.setInt(1, movie_id);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
rs = ps.executeQuery();
while (rs.next()) {
int index = 1;
int id = rs.getInt(index++);
int title = rs.getInt(index++);
int projection_type = rs.getInt(index++);
int theater_rs = rs.getInt(index++);
String date_and_time = rs.getString(index++);
double price = rs.getDouble(index++);
int admin_creator = rs.getInt(index++);
Theater theater = TheaterDAO.get(theater_rs);
Movie movie = MovieDAO.get(title);
ProjectionType projectionType = ProjectionTypeDAO.get(projection_type);
Projection projection = new Projection();
projection.setId(id);
projection.setMovie(movie.getTitle());
projection.setProjectionType(projectionType.getName());
projection.setTheater(theater.getName());
Date date = sdf.parse(date_and_time);
projection.setDateOutput(date_and_time);
projection.setDateAndTime(date);
projection.setTicketPrice(price);
projection.setAdminCreator(admin_creator);
projections.add(projection);
}
} catch(Exception ex) {
ex.printStackTrace();
} finally {
try {ps.close();} catch (Exception ex1) {ex1.printStackTrace();}
try {rs.close();} catch (Exception ex1) {ex1.printStackTrace();}
}
return projections;
}
Я всегда получаю желаемый результат с помощью этого запроса, но он случайным образом удаляет строку.
У меня есть много других методов и запрашивает базу данных, но никто не вызывает такого рода поведение.
РЕДАКТИРОВАТЬ: я пришел к выводу, изначально в таблице 25 проекций (строк), она удаляет строки до 15 осталось! (первые 10 строк удаляются, первая строка затем остальные 9 в случайном порядке)
Что, черт возьми, происходит?