Преобразование из массива SQL в массив String [] вызывает исключение PSQLException - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь преобразовать массив SQL, полученный из ResultSet.getArray (), в массив String [], но получаю исключение: org.postgresql.util.PSQLException: This connection has been closed.

Вот так я устанавливаюPreparedStatement:

pst = conn.prepareStatement("insert into normalposts (authorid,message,images,timestamp) values(?,?,?,?)");
pst.setString(1, u.getAuthorId());
pst.setString(2, u.getMessage());

// Setting the array
if(u.getImages() != null){

    // converting String[] to SQL Array
    Array sqlArray = conn.createArrayOf("VARCHAR", u.getImages());
                                                // ^this returns a String[]
    pst.setArray(3, sqlArray);
    sqlArray.free();
} else {
    pst.setArray(3, null);
}

pst.setObject(4, LocalDateTime.now());

Вот как я извлекаю этот массив из базы данных:

Array a = rs.getArray("images");

String[] images = (String[])a.getArray(); //this line causes the exception

Почему эта строка String[] images = (String[])a.getArray(); выдает исключение и как его исправить?


ОБНОВЛЕНИЕ

Я нашел свою ошибку.Исключение произошло из-за того, что я вызвал conn.close () до того, как запустил эту строку кода String[] images = (String[])a.getArray();

Это изменения, которые я сделал: я поместил conn.close () в его публичную функцию и вызвал thisфункция после запуска проблемной строки, например:

// my PostDAO class
public static void closeConn() throws SQLException {
    conn.close();
}

// another class
public void anotherClassFunction(){
    ...
    String[] images = (String[])a.getArray();
    PostDAO.closeConn();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...