Есть вывод с базы JDBC, и там прописан код
str += ("[" +
"'" + rs.getInt("ID") + "', " +
"'" + rs.getString("NAME") + "', " +
"'" + rs.getString("TYPE") + "', " +
"'" + rs.getString("DATA") + "', " +
"'" + rs.getBlob("MESSAGE") + "', " +
"'" + rs.getInt("ID2") + "', " +
"'" + rs.getString("NAMEDOCUMENT") + "', " +
"'" + rs.getInt("ID1") + "', " +
"'" + rs.getString("STATUS") +
"'],");
поля Message у меня типа blob, и когда я принимаю его в Ext JS то value у него ссылка на объект как конвертировать что бы на Ext JS выходило значения ??
Ответ
BLOB (binary large object) — это двоичные данные неспецифицированного формата. Не очень понятно, почему у вас Message (вероятно, текстовые данные) хранятся в виде BLOB. Для больших текстовых данных должен использоваться тип CLOB (character large object).
Если вы хотите вывести содержимое BLOB, интерпретируя его, как текст, вам надо знать, в какой кодировке этот текст был туда записан. Предположим, UTF-8. Тогда можно сделать так:
// ограничим максимальную длину блока данных, чтобы память не кончилась
int LENGTH_LIMIT = 100_000;
Blob blob = rs.getBlob("MESSAGE");
long length = blob.length();
// а лучше кидать исключение, если неожиданно слишком большая длина
if(length > LENGTH_LIMIT) length = LENGTH_LIMIT;
byte[] data = blob.getBytes(0, (int)length);
String message = new String(data, StandardCharsets.UTF_8);
// теперь используйте message
В заключение скажу, что формировать JSON конкатенацией строк очень плохо. Вы сильно попадёте на первой одинарной кавычке внутри текста сообщения. Есть много готовых библиотек для того, чтобы сделать это быстро и безопасно.
Комментариев нет:
Отправить комментарий