Наиболее эффективное решение для чтения CLOB, чтобы Представить в виде строки, и Представить в виде строки к CLOB в Java?

У меня есть большой CLOB (больше чем 32 КБ), которые я хочу считать в Строку, с помощью StringBuilder. Как я делаю это самым эффективным способом? Я не могу использовать "международную длину" конструктор для StringBuilder, так как длина моего CLOB длиннее, чем "интервал" и нуждается в "длинном" значении.

Я не настолько доволен классами ввода-вывода Java и хотел бы получить некоторое руководство.

Редактирование - я попробовал этим кодом для clobToString ():

private String clobToString(Clob data) {
    StringBuilder sb = new StringBuilder();
    try {
        Reader reader = data.getCharacterStream();
        BufferedReader br = new BufferedReader(reader);

        String line;
        while(null != (line = br.readLine())) {
            sb.append(line);
        }
        br.close();
    } catch (SQLException e) {
        // handle this exception
    } catch (IOException e) {
        // handle this exception
    }
    return sb.toString();
}
43
задан Jonas 30 January 2010 в 22:58
поделиться

3 ответа

Я не могу использовать конструктор "int length" для StringBuilder, так как длина моего CLOB больше, чем int и мне нужно значение long.

Если длина CLOB больше, чем помещается в int, то данные CLOB также не поместятся в строку. Для работы с таким большим количеством XML-данных придется использовать потоковый подход.

Если фактическая длина CLOB меньше, чем Integer.MAX_VALUE, просто заставьте long в int, поставив (int) перед ним.

19
ответ дан 26 November 2019 в 22:37
поделиться

Какие версии Windows вы хотите нацелиться?

Я считаю, что нет простого способа. Для Windows XP есть Джина . Для Windows Vista есть «провайдеры учетных данных».

Кроме того, если вы нацеливаете Windows XP, вы можете создать сервис, который отправляет нажатий нажатий на настольный компьютер WinLogon, чтобы войти, как если пользователь нажал их на клавиатуре. Это было сделано Reallvnc или Ultravnc, я не помню. Однако этот подход не работает в Windows Vista.

-121--3732591-

Если вы действительно должны использовать только стандартные библиотеки, то вам просто нужно немного расширить на решение Omar. (Ioutils Apache в основном просто набор методов удобных, которые сохраняются на большом количестве кодирования)

Вы уже можете получить входной поток через CLOBOBJECT.GETASCIISTREAM ()

Вы просто должны «вручную передавать «Символы для StringWriter:

InputStream in = clobObject.getAsciiStream();
Reader read = new InputStreamReader(in);
StringWriter write = new StringWriter();

int c = -1;
while ((c = read.read()) != -1)
{
    write.write(c);
}
write.flush();
String s = write.toString();

имейте в виду, что

  1. Если ваш Clob содержит больше символов, чем будет соответствовать строке, это не будет работать.
  2. Оберните входную систему и пневматизм с буферреджером и буфером-буферистом соответственно для лучшей производительности.
4
ответ дан 26 November 2019 в 22:37
поделиться
Метод

getElityStartId возвращает узел элемента, который по существу является просто объектом JavaScript. Этот объект можно назначить переменной, что означает, что переменная будет указывать на этот объект при каждом вводе этой переменной на более позднем этапе. Таким образом,

var id1 = document.getElementById('id1');

id1 теперь относится к элементу DOM с id , равным id1 . Если элемент с этим идентификатором не найден, то document.getEliveStartId возвращает значение null.

Если элементы остаются в DOM и не заменяются, то их имеет смысл хранить в массиве, чтобы можно было ссылаться на них сколько угодно раз без каких-либо затрат на производительность.

Если это поможет, вы можете создать простую функцию для этого:

function getElementsByIds( /* id1, id2 ... */ ) {

    var elems = [];

    for (var i = 0, l = arguments.length; i < l; i++) {
        elems[i] = document.getElementById(arguments[i]);
    }

    return elems;

}

app.elements = getElementsByIds('id1', 'id2', 'id3');
-121--2827377-

Нет. Отсутствует связь между Приложением Silverlight и браузером, в котором оно работало при установке. После запуска в качестве Приложения Silverlight использует собственный стек ClureHTTP и больше не зависит от стека HTTP браузера.

Предполагая, что нестабильность является результатом расширений Firefox, может помочь запуск приложения в OOB. Имейте в виду, что HTTP-стек браузера, скорее всего, будет более эффективным, и вы освободите автоматическую обработку файлов cookie.

-121--3404144-

Хорошо Я предположу общее использование, сначала вы должны скачать apache commons , там вы найдете класс утилит с именем IOutils, который имеет метод с именем copy ();

Теперь решение: получить входной поток объекта CLOB с помощью getAsciiStream () и передать его методу copy ().

InputStream in = clobObject.getAsciiStream();
StringWriter w = new StringWriter();
IOUtils.copy(in, w);
String clobAsString = w.toString();
45
ответ дан 26 November 2019 в 22:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: