java - 如何在 Apache Jackrabbit 上运行查询,举例说明

标签 java database jackrabbit jcr jcr-sql2

我正在使用 Apache Jackrabbit 作为数据库。

In my case, root node has numbers of child nodes(only at depth 1).
All child node has unique name, i.e., some Integer.
Each child Node have some properties that I have used further.

我的任务

我必须选择键(整数值)最小的前 10 个节点。

我的想法

为了实现上述目标,我进行了一个查询,对所有子节点的键进行排序,并选择前 10 个。然后通过使用这些键,我得到所有对应的节点,并在工作后删除所有键/值对。

为此,我在互联网上搜索了很多如何运行查询。你能告诉我如何在 apache jackrabit 上运行查询吗?很好,如果你用例子解释。

编辑编号1

公共(public)课 JackRabbit {

public static void main(String[] args) throws Exception {

    try {

        Repository repository = JcrUtils.getRepository("http://localhost:4502/crx/server");
        javax.jcr.Session session = repository.login(new SimpleCredentials("admin", "admin".toCharArray()));

        Node root = session.getRootNode();


        // Obtain the query manager for the session via the workspace ...
        javax.jcr.query.QueryManager queryManager = session.getWorkspace().getQueryManager();

        // Create a query object ...
        String expression = "select * from nt:base where name= '12345' ";
        javax.jcr.query.Query query = queryManager.createQuery(expression, javax.jcr.query.Query.JCR_SQL2);

        // Execute the query and get the results ...
        javax.jcr.query.QueryResult result = query.execute();


        session.logout();

    } catch (Exception e) {
        e.printStackTrace();
    }
}

异常

javax.jcr.query.InvalidQueryException: Query:
select * from nt:(*)base where name= '12345'; expected: <end>
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    at org.apache.jackrabbit.spi2dav.ExceptionConverter.generate(ExceptionConverter.java:69)
    at org.apache.jackrabbit.spi2dav.ExceptionConverter.generate(ExceptionConverter.java:51)
    at org.apache.jackrabbit.spi2dav.ExceptionConverter.generate(ExceptionConverter.java:45)
    at org.apache.jackrabbit.spi2dav.RepositoryServiceImpl.executeQuery(RepositoryServiceImpl.java:2004)
    at org.apache.jackrabbit.jcr2spi.WorkspaceManager.executeQuery(WorkspaceManager.java:349)
    at org.apache.jackrabbit.jcr2spi.query.QueryImpl.execute(QueryImpl.java:149)
    at jackrabbit.JackRabbit.main(JackRabbit.java:36)

我想写一个查询下面的场景

enter image description here

这里具有整数值的节点具有一些属性。我想按整数值对这些节点进行排序,并提取前 50 个节点以供进一步处理。

帮助我。

最佳答案

您应该在 JCR-SQL2 中引用您的节点类型名称:

select * from [nt:base]

这是 JCR-SQL 之间的主要区别之一。和 JCR-SQL2 .此外,name 是一个 dynamic operand采用选择器参数。因此,编写查询的更好方法是:

select * from [nt:base] as b where name(b) = '12345'

关于java - 如何在 Apache Jackrabbit 上运行查询,举例说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16698174/

相关文章:

java - Firefox 启动等待 45 秒超时

java - 在 Windows Azure 中为 Java Web 应用程序使用缓存

java - socket appenders - 一步一步的基本示例

mysql - 将相似的数据对象合并到单个表中是否有效?

java - 升级 Jackrabbit 1.3 到 Jackrabbit 2.1.1

java - 为什么外部类不能扩展内部类?

mysql - 如何从 MySQL 架构获取最新消息?

java - 无法连接到 MS Access 数据库

jcr - Apache 吊索 : Accessing Versions through REST API

java - 用于比较的 Jackrabbit 日期格式