Java JDBC игнорирует setFetchSize?

В то время как SimpleXML обеспечивает способ удалить узлы XML, его возможности модификации несколько ограничены. Еще одно решение состоит в том, чтобы обратиться к использованию расширение DOM. dom_import_simplexml () поможет Вам с преобразованием Вашего SimpleXMLElement в DOMElement.

Просто некоторый пример кода (протестированный с PHP 5.2.5):

$data='
    
    
    
    
    
';
$doc=new SimpleXMLElement($data);
foreach($doc->seg as $seg)
{
    if($seg['id'] == 'A12') {
        $dom=dom_import_simplexml($seg);
        $dom->parentNode->removeChild($dom);
    }
}
echo $doc->asXml();

выводы



Между прочим: выбор определенных узлов намного более прост при использовании XPath ( SimpleXMLElement-> xpath):

$segs=$doc->xpath('//seq[@id="A12"]');
if (count($segs)>=1) {
    $seg=$segs[0];
}
// same deletion procedure as above

12
задан Philip Couling 19 May 2012 в 07:56
поделиться

3 ответа

Попробуйте отключить автоматическую фиксацию:

// make sure autocommit is off
connection.setAutoCommit(false);

 st = connection.createStatement();
 st.setFetchSize(1000);
 System.out.println("start query ");
 rs = st.executeQuery(queryString);
 System.out.println("done query");

Ссылка

24
ответ дан 2 December 2019 в 04:53
поделиться

Это будет зависеть от вашего драйвера. Из документации:

Дает драйверу JDBC подсказку относительно количество строк, которые должны быть извлечены из базы данных, когда больше строк необходимо. Количество указанных строк влияет только на наборы результатов, созданные с использованием это утверждение. Если указанное значение равен нулю, то подсказка игнорируется. В значение по умолчанию равно 0.

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

2
ответ дан 2 December 2019 в 04:53
поделиться

Эти два запроса выполняют совершенно разные функции.

Использование предложения LIMIT ограничивает размер набора результатов до 10000, а установка размера выборки не делает этого. вместо этого дает подсказку драйверу, говорящую, сколько строк нужно извлекать за раз при итерации по набору результатов , который включает все 800k строк.

Поэтому при использовании setFetchSize база данных создает полный набор результатов, поэтому это занимает так много времени.

Отредактируйте для ясности: Установка размера выборки ничего не даст, если вы не перебираете результат (см. Комментарий Джона), но создание гораздо меньшего набора результатов с помощью LIMIT имеет большое значение.

2
ответ дан 2 December 2019 в 04:53
поделиться
Другие вопросы по тегам:

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