sqlite3: Самый быстрый способ выбора строк в наборе ключей [дубликат]

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
1
задан Jasper Blues 14 October 2013 в 11:18
поделиться

2 ответа

Если вы используете параметры (?), , по умолчанию максимальное число 999 .

Если вы создаете инструкцию SQL динамически, вставляя значения напрямую ( что плохо для строк), нет верхнего предела на длине такого списка. Тем не менее, существует предел длины всей инструкции SQL , которая по умолчанию равна миллиону байтов.

Если вы не можете гарантировать, что ваш запрос не превышает эти ограничения, вы должны использовать временную таблицу (см. ответ LS_dev).

1
ответ дан CL. 19 August 2018 в 03:45
поделиться

Если у вас длинный список, я бы предложил два подхода:

Первое решение:

Добавить все данные во временную таблицу:

CREATE TEMP TABLE lng_list(image_address);
-- Insert all you elements in lng_list table
-- ...
DELETE FROM images WHERE image_address NOT IN (SELECT image_address FROM lng_list);

Обязательно используйте эту внутреннюю транзакцию, чтобы получить хорошую производительность.

Второе решение:

(УДАЛЕНО: работает только для IN, а не NOT IN ...)

Производительность должна быть справедливой для любого из эти решения.

1
ответ дан LS_ᴅᴇᴠ 19 August 2018 в 03:45
поделиться
  • 1
    Второе решение не работает для NOT IN. – CL. 14 October 2013 в 11:42
  • 2
    @CL. UPS!!! Твое право! – LS_ᴅᴇᴠ 14 October 2013 в 11:45
  • 3
    Спасибо @LS_dev - вы были полезны. (Принял CL, потому что он ответил и на другую часть вопроса). – Jasper Blues 14 October 2013 в 12:11
Другие вопросы по тегам:

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