Замена данных в таблице для SQLite

Я просмотрел несколько разных предложений, но по какой-то причине ни одно из следующих решений не смогло работать / все еще дублировали данные в таблице.

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

Пока я пробовал:

public void writeToSpendingLimits(int sequence, double amount){
    String sql = "INSERT OR REPLACE INTO spending_limits(category, spending_limit) "
    + "VALUES(" + sequence + ", " +  amount + ");";           
    connection.executeSQL(sql);
}

.

public void writeToSpendingLimits(int sequence, double amount){           
        String sql = "INSERT INTO spending_limits (category, spending_limit) "
            + "VALUES(" + sequence + ", " + amount + ") "
            + "ON CONFLICT(category)"
            + "DO UPDATE SET spending_limit = " + amount + ";";
    connection.executeSQL(sql);

.

public void writeToSpendingLimits(int sequence, double amount){            
    String sql = "INSERT INTO spending_limits (category, spending_limit) "
            + "VALUES (coalesce((select category from spending_limits where category = " + amount + "),"
            + "(select max(category) from spending_limits) + 1), " + amount + ");";
    connection.executeSQL(sql);

.

public void writeToSpendingLimits(int sequence, double amount){              
    String sql = "UPDATE spending_limits " 
            + "SET category = " + sequence + ", " + "spending_limit = " + amount + " "
            + "WHERE spending_limit = " + sequence + ";\n"
            + "INSERT INTO spending_limits(category, spending_limit) "
            + "SELECT " + sequence + ", " + amount + " "
            + "WHERE (Select Changes() = 0)";
    connection.executeSQL(sql);

Какая у вас схема таблицы? Что вы имеете в виду, говоря, что не работаете?

Shawn 01.09.2018 20:22
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
255
1

Ответы 1

Предполагая, что вам нужен единый лимит расходов для каждой категории, вы можете сделать категорию столбцом УНИКАЛЬНЫЙ. Тогда дублирование категории приведет к конфликту, и будут предприняты действия по конфликту, такие как OR REPLACE.

например учтите следующее: -

DROP TABLE IF EXISTS spending_limits;
CREATE TABLE IF NOT EXISTS spending_limits (category INTEGER UNIQUE NOT NULL, spending_limit REAL);
INSERT OR REPLACE INTO spending_limits (category, spending_limit) VALUES(1,10.23);
INSERT OR REPLACE INTO spending_limits (category, spending_limit) VALUES(2,10.23);
INSERT OR REPLACE INTO spending_limits (category, spending_limit) VALUES(3,10.23);
INSERT OR REPLACE INTO spending_limits (category, spending_limit) VALUES(4,10.23);
INSERT OR REPLACE INTO spending_limits (category, spending_limit) VALUES(5,10.23);
INSERT OR REPLACE INTO spending_limits (category, spending_limit) VALUES('Animal',10.23);
INSERT OR REPLACE INTO spending_limits (category, spending_limit) VALUES('Vegetable',10.23);
INSERT OR REPLACE INTO spending_limits (category, spending_limit) VALUES('Mineral',10.23);
SELECT *,rowid AS rid FROM spending_limits;

INSERT OR REPLACE INTO spending_limits (category, spending_limit) VALUES(1,11.23);

INSERT OR REPLACE INTO spending_limits (category, spending_limit) VALUES('Animal',11.23);

SELECT *,rowid AS rid FROM spending_limits;

Это будет :-

  • УДАЛИТЬ таблицу траты_лимитов, если она существует (упрощает тестирование)
  • СОЗДАЙТЕ таблицу траты_лимитов, отметив, что столбец категории имеет атрибут УНИКАЛЬНЫЙ.
  • ВСТАВИТЬ 8 строк в таблицу траты_лимитов (смешанные типы категорий для демонстрационных целей)
  • ВЫБЕРИТЕ все строки и выведите их
  • ВСТАВИТЬ 2 повторяющиеся строки в соответствии с категорией, но с измененным количеством.
    • то есть оператор вставляет новую строку или заменяет существующую строку в зависимости от того, существовала ли категория уже.
  • ВЫБЕРИТЕ все строки и выведите их.

Результаты следующие: -

После первоначальной вставки 8 рядов: -

После вставки (замены) 2 строк, которые имеют существующие категории: -

  • Примечание Столбец рядовой также обновляется (поэтому он может быть кандидатом на то, чтобы быть таблицей БЕЗ ROWID)

Другие вопросы по теме