比较sql日期在java中出错了>>

问题描述 投票:0回答:1

我的代码中具有消息传递功能。它是这样的:一个用户(假设用户A)在星期一向用户B发送一条消息。我们有两种情况(用户B在线/离线),但是无论哪种情况,代码无论如何都会写到数据库中。基本上,该消息从用户A传输到数据库(打上时间戳记(1)),然后退回到用户B。现在,用户B在第二天(星期二)登录。然后,代码将比较用户B成功登录时的时间戳(2)和用户A发送时的时间戳(1)。

我打算做:1)如果时间戳(1)小于或等于用户B登录的时间戳(2)(如上例中的星期一vs星期二),则显示“您有n条消息”以及消息本身,或2)如果时间戳(1)大于用户B登录的时间戳(2)(星期二与星期一),则显然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
  • 发送时间:日期时间

我的代码中具有消息传递功能。它是这样的:一个用户(假设用户A)在星期一向用户B发送一条消息。我们有两种情况(用户B在线/离线),但是在两种情况下,代码都将...

java sql jdbc
1个回答
0
投票

您正在查找接收方的消息,然后在要再次扫描所有消息的位置(与接收方无关)进行迭代。

© www.soinside.com 2019 - 2024. All rights reserved.