java - 为简单的 Java 记录建立索引

标签 java cqengine

我有一个 Java 对象 Record 。它表示 SQL 执行结果的单个记录。可以CQEngine Record 的索引集合?

我的类(class)是这样的

public class Record {
    private List<String> columnNames;
    private List<Object> values;

    ... Other getters
}

我浏览了一些例子,但我没有运气。

我只想为特定列及其名称和相应值建立索引。这可以使用 cqengine 来实现吗?或者是否有其他替代方法可以实现相同的目的。

谢谢。

最佳答案

这似乎是一种奇怪的数据建模方式,但如果您愿意,您可以将 CQEngine 与该模型一起使用。

(首先,CQEngine 不会使用您的列名称,因此您可以删除该字段。)

为此,您需要定义一个 CQEngine virtual attribute对于值列表中的每个索引。

每个属性都需要使用将存储在该列/索引中的数据类型进行声明,并且需要能够将值列表中该索引处的对象转换为适当的数据类型(字符串 double 整数等)。

假设您的 Record 有一个名为 'price' 的列,其类型为 Double,并且存储在索引 5 在值列表中。您可以定义一个属性,其读取方式如下:

public static final Attribute<Record, Double> PRICE = 
    attribute("PRICE", record -> ((Double) record.values.get(5));

如果这听起来很复杂,那是因为这种数据建模方式让事情变得有点复杂:) 使用利用 Java 类型系统(您的模型没有)的数据模型通常更容易。因此,您需要自己以编程方式跟踪每个字段的数据类型等。

CQEngine 本身可以很好地使用该模型,因为最终 CQEngine 属性不需要读取字段,属性只是被编程为获取值的函数。

还有很多上面没有涵盖的内容。例如,您的值可以为空吗? (如果是这样,您应该使用 CQEngine docs 中讨论的 可为 null 各种属性。或者,您的每个 Record 对象是否可能具有不同的列集?(如果因此,当遇到新列时,您可以即时创建属性,但您可能应该将已创建的属性缓存在某处)。

希望有帮助, Niall(CQEngine 作者)

关于java - 为简单的 Java 记录建立索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56952226/

相关文章:

java - cqengine 连接两个以上集合

java - CQEngine In 子句与 MultiValueNullableAttribute

java - cqengine IndexedCollection 添加导致空指针

java - Maven 未使用 Java 11 - 编译 : invalid target release: 11 的 fatal error

java - 如何实现 <mytaglib :${foo}> in jsp? 的等效项

java - 从 Java 后端流式传输视频

java - 如何将时间从 java.util.Date 存储到 java.sql.Date

java - 从 swingworker 或在 swingworker 之后更新 JList