RQLQuery怎么写?
How write RQLQuery?
我是 ATG 的新手,我有这个问题。如何编写为我提供数据的 RQLQuery,例如这个 SQL 查询?
select avg(rating) from rating WHERE album_id = ?;
我正在尝试这种方式:
RqlStatement statement;
Object rqlparam[] = new Object[1];
rqlparam[0] = album_Id;
statement= RqlStatement.parseRqlStatement("album_id= ? 0");
MutableRepository repository = (MutableRepository) getrMember();
RepositoryView albumView = repository.getView(ALBUM);
此查询 returns 我是特定 album_id 的项目,我如何改进我的 RQL 查询,以便它 returns 对我来说是平均字段值,如 SQL上面的查询。
没有 RQL
语法可以计算查询中项目的平均值。因此,您有两种选择。您可以执行当前语句:
album_id= ? 0
然后遍历结果 RepositoryItem[]
并自己计算平均值(这在大型数据集上可能很耗时,意味着您必须将所有结果加载到内存中,因此可能不是最佳解决方案) 或者您可以实施您执行的 SqlPassthroughQuery
。
Object params[] = new Object[1];
params[0] = albumId;
Builder builder = (Builder)view.getQueryBuilder();
String str = "select avg(rating) from rating WHERE album_id = 1 group by album_id";
RepositoryItem[] items =
view.executeQuery (builder.createSqlPassthroughQuery(str, params));
这将在数据库上执行平均计算(这是它非常擅长做的事情)并为您节省 CPU 应用程序的周期和内存。
就是说,不要养成使用 SqlPassthroughQuery
的习惯,因为这意味着您不会经常使用存储库缓存,这可能对您的应用程序有害。
我是 ATG 的新手,我有这个问题。如何编写为我提供数据的 RQLQuery,例如这个 SQL 查询?
select avg(rating) from rating WHERE album_id = ?;
我正在尝试这种方式:
RqlStatement statement;
Object rqlparam[] = new Object[1];
rqlparam[0] = album_Id;
statement= RqlStatement.parseRqlStatement("album_id= ? 0");
MutableRepository repository = (MutableRepository) getrMember();
RepositoryView albumView = repository.getView(ALBUM);
此查询 returns 我是特定 album_id 的项目,我如何改进我的 RQL 查询,以便它 returns 对我来说是平均字段值,如 SQL上面的查询。
没有 RQL
语法可以计算查询中项目的平均值。因此,您有两种选择。您可以执行当前语句:
album_id= ? 0
然后遍历结果 RepositoryItem[]
并自己计算平均值(这在大型数据集上可能很耗时,意味着您必须将所有结果加载到内存中,因此可能不是最佳解决方案) 或者您可以实施您执行的 SqlPassthroughQuery
。
Object params[] = new Object[1];
params[0] = albumId;
Builder builder = (Builder)view.getQueryBuilder();
String str = "select avg(rating) from rating WHERE album_id = 1 group by album_id";
RepositoryItem[] items =
view.executeQuery (builder.createSqlPassthroughQuery(str, params));
这将在数据库上执行平均计算(这是它非常擅长做的事情)并为您节省 CPU 应用程序的周期和内存。
就是说,不要养成使用 SqlPassthroughQuery
的习惯,因为这意味着您不会经常使用存储库缓存,这可能对您的应用程序有害。