В моем коде есть функция обмена сообщениями. Это выглядит так: пользователь, скажем, пользователь A, отправляет пользователю B сообщение в понедельник. У нас есть два случая (пользователь B находится в сети / в автономном режиме), но в любом случае код все равно будет записывать в базу данных. По сути, сообщение передается от пользователя A в базу данных (получает отметку времени (1)), а затем возвращается пользователю B. Теперь пользователь B входит в систему на следующий день, во вторник. Затем код сравнивает отметку времени (2) в момент успешного входа пользователя B в систему с отметкой времени (1), когда пользователь A ее отправляет.
Я намереваюсь сделать: 1) если отметка времени (1) меньше или равна отметке времени (2) входа пользователя B (понедельник или вторник, как в примере выше), то отобразите "У вас есть n messages "вместе с самими сообщениями, или 2) если метка времени (1) больше, чем метка времени (2) входа пользователя B (вторник против понедельника), то очевидно, что B должен был прочитать эти сообщения - поэтому мы игнорируем это и только проверяет, есть ли у него новые, и отображает их для него.
Для этого я создал этот код, но он не работает. Он ничего не возвращает, даже если есть новые сообщения. Что я делаю не так? Я подозреваю, что мое сравнение дат неверно. Столбец метки времени (1) - когда сообщение отправлено, находится в DATETIME
.
public static String receiveMessage(String email) throws Exception {
String returnStatement = "";
Connection connection = null;
connection = establishConnection();
String queryCheck = "SELECT * from usersmessages WHERE receiver = ?";
PreparedStatement prepstate = connection.prepareStatement(queryCheck);
prepstate.setString(1, email);
ResultSet resultSet = prepstate.executeQuery();
while(resultSet.next()) {
//fine
String queryCheck_1 = "SELECT * from usersmessages WHERE senttime < DATE(NOW())";
PreparedStatement prepstate_1 = connection.prepareStatement(queryCheck_1);
ResultSet resultSet_1 = prepstate_1.executeQuery();
/* This means the message time is older than the login time */
if(resultSet_1.next()) {
System.out.println("check");
String queryCheck_2 = "SELECT COUNT(*) from usersmessages WHERE senttime < DATE(NOW())";
PreparedStatement prepstate_2 = connection.prepareStatement(queryCheck_1);
ResultSet resultSet_2 = prepstate_1.executeQuery();
int messagecount = resultSet_2.getInt(1);
returnStatement = "You have " + messagecount + "new messages.";
for(int i = 0; i < messagecount; i++) {
returnStatement += "Message " + i + ":\n" + resultSet_2.getString(3);
}
}
}
return returnStatement;
}
EDIT: У меня 4 столбца в БД. Вот они вместе с типами:
- отправитель: varchar
- получатель: varchar
- сообщение: varchar
- senttime: datetime