Я пытаюсь извлечь blob из базы данных postgres с помощью драйверов jdbc. Он слишком велик, чтобы иметь в памяти, поэтому я хочу передать его как загрузку. Я попытался использовать метод getBinaryStream на ResultSet, но, оказывается, этот метод действительно читает все это в памяти, поэтому не работает для большого файла.Postgresql, JDBC и потоковые BLOB
По-видимому, можно использовать метод getBlob на наборе результатов и предположительно получить входной поток от блоба и перейти оттуда, но именно там я столкнулся с проблемой.
PreparedStatement ps = con.prepareStatement("select data from file_data WHERE ID = ?");
ps.setLong(1,file.fileData.id)
ResultSet rs = ps.executeQuery()
if(rs.next()){
rs.getBlob("data")
Это код, в котором я запущен. Когда он попадает в эту последнюю строку она выкидывать ошибку, что я не могу иметь смысл ...
org.postgresql.util.PSQLException: Bad значение типа Long: хххххх
«XXXXXX "то есть содержимое файла. Вы можете себе представить, что это довольно длительное время, но на самом деле это не так.
Я застрял здесь. Кто-нибудь есть идеи о том, что происходит? Черт, я даже возьму альтернативные методы для потоковой передачи больших капель в качестве загрузки.
В моем случае это было 'rs.getBlob (...)' вместо 'rs.getBinaryStream (...)'. Никогда не поздно учиться JDBC. –