0

我正在开发一个 JavaScript 项目,它有一个现有的数据库(因此也有一个现有的模式)。

要添加新功能,我必须在表中添加一个新列。这将存储类对象的属性。

目前SELECT项目中有一个查询,每次应用启动时从数据库表中查询一堆字段,然后将这些得到的结果放入各种需要的JavaScript对象中。

所以,现在它看起来像:

let FIELDS = "field1, field2, field3";
let query = "SELECT " + FIELDS + "FROM FOO_TABLE";

在其他地方,此查询会在需要时进行(通常在应用重新启动后)。

我想把它改成:

let FIELDS = "field1, field2, field3, new_prop";

但它不会像在当前表中那样工作,这样的表不存在。(也许下次重新启动后,事情会起作用,但不是第一次)。

解决方法是什么?另外,请注意,无声的更改会比显示此属性对处理文件的每个人都是新的更改要好。

4

1 回答 1

1

好吧,您不能只将字段添加到查询中,这是行不通的,因此您有 2 个选项。

  1. 如果出现问题,请使用异常/错误来解决。我不是 sqlite 专家(事实上,我从来没有直接使用 sqlite,总是通过 API 和 ios dev.),但是如果你尝试运行一个包含不存在的列名的查询,就会出错您可以捕获、计算错误代码/字符串并决定重新运行查询减去坏列。

这不是一个好主意,它又脏又贵。我过去曾使用异常来保存重复检查查询,但即使这样也不是正确的做事方式......但它确实有效

  1. 做你想做的唯一“正确”的方法是首先检查列是否存在。在 sqlite 中,我认为没有像 mysql 中那样简单的选择命令。但是您可以使用该PRAGMA table_info('table-name')语句获取所有列,然后在运行查询之前检查您的列是否存在。这是做事的正确方法。

话虽如此,如果您在协作/团队开发环境中工作,您应该有一种更清洁的方式来升级团队中的每个人。所以我更倾向于解决这个程序问题,而不是用我的方式来解决它。

于 2013-06-11T09:01:39.663 回答