Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > метод "getBlob", пакет java.sql


Автор: Гость_Max 7.10.2003, 17:45
Всем добрый день.

Вопрос такой.
В базе данных «mySQL», нужно сохранить текст, где-то на 1000 символов.
Я пробовал создавать колонку типа «Blob», или типа «Text». Как мне достать этот текст?

Что я сделал:

String s1 = rs.getBlob(“column_name”).toString();

Ошибку не выдает, но и текст не показывает, выдает что-то вроде названия объекта.

Автор: Sun 7.10.2003, 18:36
Тебе наверно лучше получить InputStream через метод getBinaryStream() а затем вычитать данные из потока.

Автор: DarkDS 8.10.2003, 12:34
.toString(); - Выдает дебаговую информацию. Если этот метод не переопределен, чтобы выдавать осмысленную информацию, то, по дефолту, он выдает название инстанса (то есть имя объекта и его адресс в памяти JVM)


Автор: DarkDS 8.10.2003, 12:37
Если тект создан, то можешь достать rset.getString("column_name") для типа текст... Блоб - это байтовая информация... Обычно используется для хранения картинок и тд и тп...

Автор: Гость_Max 11.10.2003, 19:37
Может кому пригодится…, демонстрирую последнюю версию как достать текст записанный в виде объекта Blob в базе mySQL (Текст больше 250 символов):
/********************************************/
String g7;

BufferedReader in = new BufferedReader(new InputStreamReader(rs.getBinaryStream("Column_name")));
String line; StringBuffer ttt = new StringBuffer();
try{
while((line = in.readLine()) !=null){ttt.append(line);}
g7 = ttt.toString();
}catch(IOException ioe){}
finally{in.close();}
/*******************************************/

Хорошая ссылка по этому вопросу:
http://www.asmodeus.com.ua/library/java/JDBC/resultset.doc.htm

Теперь где можно наступить на грабли smile.gif
С помощью ResultSet возможно получать очень большие данные типа LONGVARBINARY или LONGVARCHAR. Методы getBytes и getString возвращают эти данные в виде одного большого куска (вплоть до пределов, которые можно узнать с помощью метода Statement.getMaxFieldSize). Тем не менее, может оказаться удобнее считывать очень большие данные небольшими кусками. Это делается с помощью потоков (java.io.InputStream), которые возвращаются некоторыми методами ResultSet. Обратите внимание на то, что к этим потокам надо обращаться сразу, так как они будут закрыты при следующем вызове getXXX объекта ResultSet. (Такое поведение диктуется низкоуровневой реализацией доступа к большим двоичным объектам)

Спасибо всем за участие.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)