Возникли проблемы с заполнением массива LocalDateTime данными из базы данных MySQL - PullRequest
0 голосов
/ 07 мая 2020

Я использую базу данных 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

1 Ответ

0 голосов
/ 07 мая 2020

Нашел решение.

Мне нужно было инициализировать размер массива, чтобы заполнить его. Поэтому я создал еще один метод, который прошел через все элементы и получил размер.

Вот код.

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;
}
...