Хорошо, вот мое решение, чтобы упростить программирование для любого, кто происходит с этим потоком. хитрость заключается в том, чтобы обновлять все индексы заказа выше или ниже вставки / удаления в одном обновлении.
Использование числового (целочисленного) столбца в таблице, поддерживаемого запросами SQL
CREATE TABLE myitems (Myitem TEXT, id INTEGER PRIMARY KEY, orderindex NUMERIC);
Чтобы удалить элемент с индексом заказа 6:
DELETE FROM myitems WHERE orderindex=6;
UPDATE myitems SET orderindex = (orderindex - 1) WHERE orderindex > 6;
Чтобы поменять местами два элемента (4 и 7):
UPDATE myitems SET orderindex = 0 WHERE orderindex = 4;
UPDATE myitems SET orderindex = 4 WHERE orderindex = 7;
UPDATE myitems SET orderindex = 7 WHERE orderindex = 0;
т.е. 0 не используется, поэтому используйте его как пустышку, чтобы избежать неоднозначного элемента.
Вставить в 3:
UPDATE myitems SET orderindex = (orderindex + 1) WHERE orderindex > 2;
INSERT INTO myitems (Myitem,orderindex) values ("MytxtitemHere",3)