【问题标题】:ORMLite createOrUpdate() records while preserving specific column?ORMLite createOrUpdate() 记录同时保留特定列?
【发布时间】:2013-07-23 16:36:16
【问题描述】:

我正在使用 ORMLite 来管理包含数据收集应用程序的查找值列表的数据库表。这些查找值会定期从远程服务器更新。但是,我希望能够在创建或更新记录时将数据保留在特定列中,因为我想存储与每个查找值关联的使用计数(特定于设备)。以下是我更新记录的方式:

        //build list of new records
        final List<BaseLookup> rows = new ArrayList<BaseLookup>();
        for (int i = 0; i < jsonRows.length(); i++) {
            JSONObject jsonRow = jsonRows.getJSONObject(i);

            //parse jsonRow into a new BaseLookup object and add to rows
            ...
        }

        //add the new records
        dao.callBatchTasks(new Callable<Void>() {
            public Void call() throws Exception {
                for (BaseLookup row : rows) {
                    //this is where I'd like to preserve the existing
                    //value (if any) of the "usageCount" column

                    Dao.CreateOrUpdateStatus result = dao.createOrUpdate(row);
                }
                return null;
            }
        });

我考虑过尝试在循环中单独获取和合并每条记录,但这似乎表现不佳(有些表是几千条记录)。有没有更简单或更集成的方法来实现这一点?

【问题讨论】:

  • 我认为自己合并记录是您唯一的选择。

标签: java android sql database ormlite


【解决方案1】:

我希望能够在创建或更新记录时将数据保留在特定列中,因为我想存储与每个查找值关联的使用计数(特定于设备)

如果您必须从 JSON 数据更新某些列,但又想将 usageCount 设置为 usageCount + 1,那么您有几个选择。

  • 您可以使用dao.updateBuilder(); 方法和UpdateBuilder 类构建更新语句,然后将列更新为其新值,并将usageCount 更新为id 匹配的usageCount + 1。您应该注意返回值以确保更新了一行。如果没有,则创建对象。

  • 但是,这样做会更容易:

    1. 从数据库中获取BaseLookup
    2. 如果为 null,则调用 dao.create() 以保留新条目
    3. 否则更新列并增加usageCount
    4. 并使用dao.update(...) 将其保存回来

【讨论】:

  • 谢谢,我认为后一种解决方案可能最适合我的应用程序,因为数据库并不庞大。我也应该考虑使用 UpdateBuilder,但对于像这样相对简单的操作来说似乎没有必要。
猜你喜欢
  • 1970-01-01
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
  • 1970-01-01
  • 2020-06-17
相关资源
最近更新 更多