我的代码中具有消息传递功能。它是这样的:一个用户(假设用户A)在星期一向用户B发送一条消息。我们有两种情况(用户B在线/离线),但是无论哪种情况,代码无论如何都会写到数据库中。基本上,该消息从用户A传输到数据库(打上时间戳记(1)),然后退回到用户B。现在,用户B在第二天(星期二)登录。然后,代码将比较用户B成功登录时的时间戳(2)和用户A发送时的时间戳(1)。
我打算做:1)如果时间戳(1)小于或等于用户B登录的时间戳(2)(如上例中的星期一vs星期二),则显示“您有n条消息”以及消息本身,或2)如果时间戳(1)大于用户B登录的时间戳(2)(星期二与星期一),则显然B必须已阅读这些消息-因此我们将其忽略,仅检查他是否具有任何较新的版本,并显示给他。
为此,我编写了此代码,但是它不起作用。即使有新消息,它也不返回任何内容。我做错了什么?我确实怀疑我的日期比较是错误的。时间戳记(1)的列-发送消息时位于DATETIME
中。
我在数据库中有4列。它们与类型一起出现: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:
我的代码中具有消息传递功能。它是这样的:一个用户(假设用户A)在星期一向用户B发送一条消息。我们有两种情况(用户B在线/离线),但是在两种情况下,代码都将...
您正在查找接收方的消息,然后在要再次扫描所有消息的位置(与接收方无关)进行迭代。