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


Автор: Antarn 8.6.2008, 18:21
В базе одно из полей - binary(14) , значения поля записываются как "CONVERT(binary, 'text')" .

Как преобразовать это поле обратно в читаемый текст 'text' ? ( получаю через rs.getString() )

Автор: LSD 8.6.2008, 23:14
Код

select DECONVERT(binary) from ...

Автор: Antarn 9.6.2008, 07:15
LSD, спасибо за идею. Но тогда получается лишний запрос, так как раньше я вытаскивал все поля:
Код

SELECT * FROM ...

а сейчас еще и
Код

SELECT CONVERT(char, binary_field) FROM ...

Уже полученный бинарный текст в "нормальный" нельзя преобразовать встроенными средствами ?

Добавлено через 5 минут и 14 секунд
p.s.: конечно можно в селекте перечислить все поля таблицы, но в той же базе есть таблица с 100+ полями и такой вариант получается не совсем удобным.

Автор: LSD 9.6.2008, 11:37
Намеков не понимаем smile

Телепатов тут не водится (все вымерли). Ты не сказал, но что за СУБД, ни что это за функция которая конвертирует данные, ни как именно она это делает. Потому дать совет, как это можно декодировать на клиенте - нельзя. Да и вообще ничего конкретного сказать нельзя.

Автор: Antarn 9.6.2008, 11:57
LSD, пардон, думал что поля binary и класс ResultSet есть для всех баз smile

база MSSQL. Подключаюсь через SQLServerDataSource().

Цитата

ни что это за функция которая конвертирует данные, ни как именно она это делает

Функцию, которая из binary(14) сделает читаемый текст, я и ищу, так как к примеру rs.getString("name") получает "61666473660000000000000000000000" , а я хочу видеть "vaseapupkin". Как это преобразовать ?

Что еще забыл указать для полноты картины ? smile

Автор: Antarn 9.6.2008, 12:37
Всё, разобрался:
такой запрос
Код

SELECT *, CONVERT(char, id) as text FROM ..
 
вернёт ряд, где последнее поле text и есть удобоваримый текст.


LSD,  спасибо  smile     (хотя так и не узнал, как сделать такое преобразование  smile  )

Автор: LSD 9.6.2008, 12:45
Уже веселей smile

Получить не строку а байты можно так:
Код

byte[] data = resultSet.getBytes(i);

как из них получить строку, зависит от того как работает функция CONVERT. Судя по описанию, она просто преобразует строку в байты, вопрос только в том, в какой кодировке она это делает.

Из байтов получить строку можно так:
Код

String str = new String(data, "UTF-16");

Автор: Antarn 9.6.2008, 14:25
CONVERT оказывается преобразовывала символы в их хекс-значение.
То есть строка "afdsf" становилась "0x6166647366"   (61 - a, 66 - f, 64 - d, 73 - s).

Я преобразовал обратно вот так:
Код

           String text = "";
            for (int i=0; i< data.length()-1 ; i+=2)
            {
                int nr = Integer.decode("0x"+data.charAt(i)+data.charAt(i+1));

                text = text+(char)nr;
            }
            System.out.println(text);

Может есть другой, лучший способ ?

Автор: LSD 9.6.2008, 17:24
Цитата(Antarn @  9.6.2008,  15:25 Найти цитируемый пост)
CONVERT оказывается преобразовывала символы в их хекс-значение.

CONVERT не преобразовывает символы в их HEX коды. Он преобразовывает их в байты, а вот уже байты драйвер преобразует в HEX коды когда ты вызываешь getString().

Как получить байты и как из байтов получить строку я тебе уже показал. Вопрос только в кодировке.

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