Я пытаюсь преобразовать массив 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();
}