Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> binary data в читаемый текст 
V
    Опции темы
Antarn
Дата 8.6.2008, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 11.8.2006

Репутация: нет
Всего: нет



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

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

Это сообщение отредактировал(а) Antarn - 8.6.2008, 18:22
PM MAIL   Вверх
LSD
Дата 8.6.2008, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Код

select DECONVERT(binary) from ...



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Antarn
Дата 9.6.2008, 07:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 11.8.2006

Репутация: нет
Всего: нет



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

SELECT * FROM ...

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

SELECT CONVERT(char, binary_field) FROM ...

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

Добавлено через 5 минут и 14 секунд
p.s.: конечно можно в селекте перечислить все поля таблицы, но в той же базе есть таблица с 100+ полями и такой вариант получается не совсем удобным.
PM MAIL   Вверх
LSD
Дата 9.6.2008, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Намеков не понимаем smile

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


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Antarn
Дата 9.6.2008, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 11.8.2006

Репутация: нет
Всего: нет



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

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

Цитата

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

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

Что еще забыл указать для полноты картины ? smile
PM MAIL   Вверх
Antarn
Дата 9.6.2008, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 11.8.2006

Репутация: нет
Всего: нет



Всё, разобрался:
такой запрос
Код

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


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

Это сообщение отредактировал(а) Antarn - 9.6.2008, 12:38
PM MAIL   Вверх
LSD
Дата 9.6.2008, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Уже веселей smile

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

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

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

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

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



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Antarn
Дата 9.6.2008, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 11.8.2006

Репутация: нет
Всего: нет



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);

Может есть другой, лучший способ ?
PM MAIL   Вверх
LSD
Дата 9.6.2008, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



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

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

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


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1225 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.