android - 应用批量操作后获取id

标签 android android-contentprovider bulkinsert android-sqlite

我正在我的提供程序上应用一批 ContentProviderOperations:

ContentProviderResult[] result = resolver.applyBatch(...)

一切都按预期工作,数据被插入到数据库中,但如果我想提取 id,则 uri 的最后一个元素(应该是 id)始终为 null。

发生这种情况是因为我已将表的 _id 设置为自动增量(换句话说,如果我不自动增量 id 并使用代码中的手动 uid 填充它,它会起作用吗)。

如果没有,谁能告诉我是什么导致了这种行为。

更新:这是用于创建表的字符串:

    private static final String CREATE_TABLE_WORKFLOWSTATES =
        "CREATE TABLE " + Tables.WORKFLOWSTATES + " (" 
        + BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
        + WorkflowStatesColumns.NAME + " TEXT NOT NULL,"
        + "UNIQUE ("+ WorkflowStatesColumns.NAME + ") ON CONFLICT IGNORE)";

如果我查看表格,我可以看到列_idname,插入的可见数据表明自动增量工作正常。

更新 2:这就是我构建 ContentProviderOperation 的方式:

这是我的带有 ContentProviderOperations 的 ArrayList(CollectionUtils 是一个自定义类,用于实例化 Arraylist):

ArrayList<ContentProviderOperation> batch = CollectionUtils.newArrayList();

这是实际操作:

batch.add(ContentProviderOperation
    .newInsert(InvoiceContract.addCallerIsSyncAdapterParameter(WorkflowStates.CONTENT_URI))
    .withValue(WorkflowStates.NAME, task.getWFS()).build());

最佳答案

在插入的情况下(我猜您在数据库中插入了一行),result[i].uri 包含新插入行的 URI,其中 i 是该行的索引操作数组中的相应操作。尝试打印这个 URI,您将看到它是否对应于真实的 id。

如果您的操作之一是 UPDATE 或 DELETE,则相应的结果 URI 将为 null,但 result[i].count 将包含更新/删除的行数。

更新

我猜问题是你在 NAME 上有一个唯一的索引。也许,您已经插入了同名的行?

更新2

问题是ContentProvider中的插入函数没有正确返回id。

关于android - 应用批量操作后获取id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13195057/

相关文章:

Android SQLite 数据库错误插入列

Android:如何以毫秒为单位获取小时/分钟

android - 从 ContactProvider 的单个查询中获取联系人列表及其主要电子邮件和电话号码

android - 我应该使用内容提供商吗?

database - 驼色和散装插入物

android - 我应该在 onSaveInstanceState 中保留数据对象吗

android - 在 Android 中动态顺序地用颜色填充 ImageView 或位图

android - 拥有带有 SQLite 和多个表的 ContentProvider

mysql LOAD DATA INFILE NA 到 NULL 转换

sql-server - 从文件批量插入引发错误无法批量加载,因为无法打开文件