【发布时间】:2020-05-08 04:06:34
【问题描述】:
我的代码中有消息传递功能。它是这样的:一个用户,假设是用户 A,在星期一向用户 B 发送了一条消息。我们有两种情况(用户 B 在线/离线),但无论哪种情况,代码都会写入数据库。基本上,消息从用户 A 传输到数据库(获取时间戳 (1)),然后反弹给用户 B。现在用户 B 在第二天(星期二)登录。然后,代码会将用户 B 成功登录时的时间戳 (2) 与用户 A 发送时的时间戳 (1) 进行比较。
我打算这样做:1) 如果时间戳 (1) 小于或等于用户 B 登录的时间戳 (2)(如上例中的星期一与星期二),则显示“您有 n 条消息”与消息本身,或者 2) 如果时间戳 (1) 大于用户 B 登录的时间戳 (2)(周二 vs 周一),那么显然 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;
}
编辑:我在数据库中有 4 列。它们与类型一起在这里:
- 发件人:varchar
- 接收者:varchar
- 消息:varchar
- 发送时间:日期时间
【问题讨论】:
-
你能透露一下 DB 列的数据类型吗?
-
是的。我现在也更新了列和数据类型。