Чтение ячейки с помощью getBinaryStream

#java #jdbc #inputstream

#java #jdbc #входной поток

Вопрос:

В моей таблице базы данных у меня есть столбец типа varchar211 . Я прочитал этот столбец из java

  java.sql.ResultSet r = s.executeQuery("Select * from table1");
 InputStream  is = r.getBinaryStream("column1");
  

Я что-то делаю после этого кода. Но я не смог прочитать целое значение

Под текстом находится моя строка.

«Называемое скрытым семантическим индексированием из-за его способности сопоставлять семантически связанные термины, скрытые в наборе текста, оно впервые было применено к тексту в Bell Laboratories в конце 1980-х годов. Метод, также называемый скрытым семантическим анализом (LSA), раскрывает скрытую семантическую структуру, лежащую в основе использования слов в тексте, и то, как ее можно использовать для извлечения смысла текста в ответ на запросы пользователя, обычно называемые поиском концепций. Запросы или концептуальный поиск по набору документов, прошедших LSI, будут возвращать результаты, концептуально похожие по смыслу на критерии поиска, даже если в результатах нет определенного слова или слов, совпадающих с критериями поиска. «

Но я мог прочитать только эту ее часть

Называется скрытым семантическим индексированием из-за его способности сопоставлять семантически связанные термины

Почему я не смог прочитать ее целиком?

Ответ №1:

Очевидно, вы не полностью читаете InputStream . Распространенной ошибкой новичков является предположение, что InputStream#available() возвращает длину потока, а затем считывается только это количество байтов. Это неверно. Вам нужно прочитать ее полностью, пока InputStream#read() метод не вернется -1 . См. Также Руководство по вводу-выводу Java. Другая возможная причина заключается в том, что текст содержит новые строки, и вы используете BufferedReader#readLine() его для чтения, и он был вызван только один раз. Это тоже неверно. Вам нужно вызывать ее в цикле, пока она не вернется null .

Но поскольку это varchar поле, почему бы вам просто не использовать ResultSet#getString() ?

 String column1 = r.getString("column1");
  

Комментарии:

1. Я использую библиотеку и метод, который я использую, принимая параметр в качестве InputStream , поэтому я должен использовать Inputstream.

2. Сообщите об этом как об ошибке сопровождающим библиотеки, чтобы они исправили ее.

3. Хорошо, тогда как я должен использовать InputStream? Не могли бы вы привести мне пример?

4. Я уже ответил на это. Читайте, пока read() метод не вернется -1 . Я даже дал ссылку на учебное пособие по Java IO.