Вставить или игнорировать
Просто измените (хотя на самом деле это не обработка исключений, а обход обходов)
String insertDataScript = "INSERT INTO "+tableName+" VALUES (";
до
String insertDataScript = "INSERT OR IGNORE INTO "+tableName+" VALUES (";
Рассмотрим следующую демонстрацию (эквивалентную предложенной и затем имеющейся у вас): -
- rowid был использован для удобства, поскольку это в основном сборка первичного ключа.
единственная причина, по которой столбцы были указаны, т.е. (rowid,othercolumn,mydatecolumn)
, заключается в том, что rowid обычно скрыт. В вашем случае просто VALUES (без предшествующих столбцов) будет ожидать значения для всех столбцов и, таким образом, включать в себя определенные столбцы первичного ключа.
показано / выполнено в обратном порядке, так как оба могут работать вместе
: -
INSERT OR IGNORE INTO mytable (rowid,othercolumn,mydatecolumn) -- rowid is a PRIMARY KEY as such
VALUES
(10,'x','x'),
(11,'x','x'),
(12,'x','x'),
(13,'x','x'),
(14,'x','x'),
(10,'x','x')
;
INSERT INTO mytable (rowid,othercolumn,mydatecolumn) -- rowid is a PRIMARY KEY as such
VALUES
(20,'x','x'),
(21,'x','x'),
(22,'x','x'),
(23,'x','x'),
(24,'x','x'),
(20,'x','x')
;
Результат: -
INSERT OR IGNORE INTO mytable (rowid,othercolumn,mydatecolumn) -- rowid is a PRIMARY KEY as such
VALUES
(10,'x','x'),
(11,'x','x'),
(12,'x','x'),
(13,'x','x'),
(14,'x','x'),
(10,'x','x')
> Affected rows: 5
> Time: 0.208s
т.е. 5 из 6 были добавлены 6-й дубликат (в соответствии с первичным ключом) был пропущен.
INSERT INTO mytable (rowid,othercolumn,mydatecolumn) -- rowid is a PRIMARY KEY as such
VALUES
(20,'x','x'),
(21,'x','x'),
(22,'x','x'),
(23,'x','x'),
(24,'x','x'),
(20,'x','x')
> UNIQUE constraint failed: mytable.rowid
> Time: 0.006s
т.е. ни один не вставлен из-за 1 дубликата.
ВСТАВИТЬ ИЛИ ЗАМЕНИТЬ (может быть полезно)
Если вы хотите применить данные из дубликатов, то вместо INSERT OR IGNORE вы можете использовать INSERT OR REPLACE .
например. следующее (запустить после вышеупомянутого, т.е. все биты дубликатов с разными данными): -
INSERT OR REPLACE INTO mytable (rowid,othercolumn,mydatecolumn) -- rowid is a PRIMARY KEY as such
VALUES
(10,'xx','x'),
(11,'x','xx'),
(12,'aa','x'),
(13,'x','aa'),
(14,'x','bb'),
(10,'cc','x')
;
тогда вы получите: -
INSERT OR REPLACE INTO mytable (rowid,othercolumn,mydatecolumn) -- rowid is a PRIMARY KEY as such
VALUES
(10,'xx','x'),
(11,'x','xx'),
(12,'aa','x'),
(13,'x','aa'),
(14,'x','bb'),
(10,'cc','x')
> Affected rows: 6
> Time: 0.543s
т.е. теперь действуют все 6 INSERT (5 строк обновляются как 1-е и последнее обновление дважды в одной и той же строке).