Я просмотрел несколько разных предложений, но по какой-то причине ни одно из следующих решений не смогло работать / все еще дублировали данные в таблице.
«Категория» будет уникальным значением для этой таблицы 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);


Предполагая, что вам нужен единый лимит расходов для каждой категории, вы можете сделать категорию столбцом УНИКАЛЬНЫЙ. Тогда дублирование категории приведет к конфликту, и будут предприняты действия по конфликту, такие как 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 строк, которые имеют существующие категории: -
Какая у вас схема таблицы? Что вы имеете в виду, говоря, что не работаете?