0

我正在使用 MySQL 数据库来保存我在 Java 中的提醒应用程序的信息。我正在尝试提取信息并将其存储在一个数组中,并将数组的每个元素与更新的当前时间戳进行比较。问题是我的代码给出了一个空指针异常,我不知道为什么。它在 LocalDateTime 不是数组时起作用,但是当我将它变成数组时它会抛出错误。它还要求我将其初始化为空值。

关于如何解决这个问题的想法?任何帮助表示赞赏。

这是有问题的方法。

public static LocalDateTime[] getReminderTime()
{
    String SQL = "SELECT r_dateTime FROM reminder_database.reminder;";
    LocalDateTime reminderTime[] = null;
    try 
    {
        Connection conn = main.getConnection();

        java.sql.Statement stmt;
        stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(SQL);

        if(rs.isBeforeFirst())
        {
            for(int i = 0; rs.next(); i++)
            {
                reminderTime[i] = rs.getTimestamp(1).toLocalDateTime();
            }
        }

        rs.close();
        stmt.close();
        conn.close();
    }
    catch(Exception e)
    {
        System.out.println("Exception thrown with getReminderTime --> " + e + e.getStackTrace());
    }
    return reminderTime;
}

这是抛出的异常

Exception thrown with getReminderTime --> java.lang.NullPointerException[Ljava.lang.StackTraceElement;@6dfc1e5f
Exception thrown with getReminderTime --> java.lang.NullPointerException[Ljava.lang.StackTraceElement;@3b2da18f
4

1 回答 1

0

找到了解决方案。

我需要初始化数组的大小以填充它。所以我创建了另一种方法来遍历所有元素并获取大小。

这是代码。

public static LocalDateTime[] getReminderTime()
{
    String SQL = "SELECT r_dateTime FROM reminder_database.reminder;";
    LocalDateTime reminderTime[] = null;
    reminderTime = new LocalDateTime[getSizeOfRs()];
    try 
    {
        Connection conn = main.getConnection();

        java.sql.Statement stmt;
        stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(SQL);


        if(rs.isBeforeFirst())
        {

            for(int i = 0; rs.next(); i++)
            {
                reminderTime[i] = rs.getTimestamp(1).toLocalDateTime();

            }
        }

        rs.close();
        stmt.close();
        conn.close();
    }
    catch(Exception e)
    {
        System.out.println("Exception thrown with getReminderTime --> " + e +  e.getStackTrace());
    }
    return reminderTime;
}

和获取 rs 大小

public static int getSizeOfRs()
{

    String SQL = "SELECT * FROM reminder_database.reminder;";
    int size = 0;
    try {
        Connection conn = main.getConnection();

        java.sql.Statement stmt;
        stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(SQL);


        for(int i = 0; rs.next(); i++)
            size++;
    }
    catch(Exception e)
    {
        System.out.println("Exception thrown with getSizeofRS --> " + e +  e.getStackTrace());
    }

    return size;
}
于 2020-05-06T22:28:11.363 回答