我找到了解决方法,但我对 Adobe Air 和 SQLite 遇到的问题完全感到困惑。一个UPDATE
我认为在开发过程早期工作正常的查询突然开始失败并出现错误details:'could not convert text value to numeric value.', operation:'execute', detailID:'2300'
。几个小时后,我发现如果我在查询中包含一个非常不相关的列,并将其设置为任意值,问题就会消失。幸运的是,这并没有以任何有意义的方式影响业务逻辑,所以我将保持原样。然而,我讨厌这样的神秘。谁能想到可能发生了什么?
(编辑:抱歉,我在代码中犯了一个错误。最后两个查询在我原来的帖子中是相同的。事实上,UPDATE
仅当我还添加时查询才有效locked = null
or locked = 0
到查询。如果我没有设置这个值,查询就会失败。我尽了一切努力来解决这个问题,包括重建数据库文件。)
这是表定义:
CREATE TABLE cars (
car_id INTEGER PRIMARY KEY AUTOINCREMENT DEFAULT NULL,
cargroup_id NUMERIC,
starting_ordinal NUMERIC,
ending_ordinal NUMERIC,
locked NUMERIC
);
这个查询一直有效:
var query = new Query(
"UPDATE cars SET locked = (car_id = ?) WHERE cargroup_id = ?",
[intCarId,intCargroupId],
success,failure
);
此查询因上述错误而失败([编辑]):
var query = new Query(
"UPDATE cars SET starting_ordinal = ?, ending_ordinal = ?, cargroup_id = ? WHERE car_id = ?",
[
parseInt(objPayout.starting_ordinal,10),
parseInt(objPayout.ending_ordinal,10),
parseInt(objPayout.cargroup_id,10),
parseInt(objPayout.car_id,10)
],
success,failure
);
我通过将查询更改为以下方式解决了该问题:
var query = new Query(
"UPDATE cars SET starting_ordinal = ?, ending_ordinal = ?, cargroup_id = ?, locked = null WHERE car_id = ?",
[
parseInt(objPayout.starting_ordinal,10),
parseInt(objPayout.ending_ordinal,10),
parseInt(objPayout.cargroup_id,10),
parseInt(objPayout.car_id,10)
],
success,failure
);