我正在编写一个wpf destop应用程序,并希望使用SQL Server CE作为后端.我正在努力想出一个有效的数据分页方法.在SQL Server Express中,我可以这样做:
Select ID, FirstName, LastName
From (SELECT ROW_NUMBER() OVER (ORDER BY ID)
AS Row, ID, FirstName, LastName
From TestTable
)
WHERE Row > 1 AND Row <= 10
Run Code Online (Sandbox Code Playgroud)
在SQL Server CE中有什么可比性的吗?我不完全确定什么是和不支持.我想一次只从数据库中返回10行,而不必撤回所有数据,然后将其过滤掉以显示给用户,因为这样会慢得多.谢谢.
我希望能够采取如下序列:
my_sequence = ['foo', 'bar', 'baz', 'spam', 'eggs', 'cheese', 'yogurt']
Run Code Online (Sandbox Code Playgroud)
使用如下功能:
my_paginated_sequence = get_rows(my_sequence, 3)
Run Code Online (Sandbox Code Playgroud)
要得到:
[['foo', 'bar', 'baz'], ['spam', 'eggs', 'cheese'], ['yogurt']]
Run Code Online (Sandbox Code Playgroud)
这就是我想到的想法:
def get_rows(sequence, num):
count = 1
rows = list()
cols = list()
for item in sequence:
if count == num:
cols.append(item)
rows.append(cols)
cols = list()
count = 1
else:
cols.append(item)
count += 1
if count > 0:
rows.append(cols)
return rows
Run Code Online (Sandbox Code Playgroud) 我正在开展一个项目,我们定期通过IMAP或POP收集大量电子邮件,对其进行分析(例如聚类到对话,提取重要句子等),然后通过网络呈现视图到最后用户.
主视图将是一个类似Facebook的个人资料页面,用于最近(大约20个)对话的每个联系人,每个对话都来自我们捕获的电子邮件.
对我们而言,能够经常快速地检索个人资料页面和最近20个项目非常重要.我们也可能经常在此Feed中插入最近的电子邮件.为此,文档存储和MongoDB的低成本原子写入看起来非常有吸引力.
然而,我们还会有大量的旧电子邮件会话,这些会话不会经常被访问(因为它们不会出现在最近的20个项目中,人们只会在他们搜索它们时看到它们,这将是相对罕见).此外,随着时间的推移,此数据的大小将比联系人存储的增长更快.
从我读过的内容来看,MongoDB似乎或多或少地要求整个数据集保留在RAM中,解决这个问题的唯一方法就是使用虚拟内存,这会带来很大的开销.特别是如果Mongo无法区分易失性数据(配置文件/提要)和非易失性数据(旧电子邮件),这可能最终会非常讨厌(因为它似乎将虚拟内存分配转移到操作系统,我不知道Mongo怎么可能这样做.
似乎唯一的选择是(a)购买足够的RAM来存储所有内容,这对于易失性数据来说很好,但是对于捕获TB的电子邮件几乎没有成本效益,或者(b)使用虚拟内存并且看到读取/写入我们的易失性数据慢慢爬行.
这是正确的,还是我错过了什么?MongoDB是否适合这个特殊问题?如果是这样,配置会是什么样的?
我尝试用Spring Boot实现JPA Repository它工作正常.现在,如果我尝试在接口中实现自定义查询,使用@Query Annotation扩展JpaRepository,它可以很好地返回Bean的列表.(使用NamedQuery).现在,当我尝试使用分页自定义方法/查询时,它不起作用.
代码:
控制器:
@RequestMapping("/custompages/{pageNumber}")
public String getAllEmployeesUsingNamedQueryWithPaging(@PathVariable Integer pageNumber,Model model)
{
Page<Employee> page = employeeService.getAllEmployeesUsingNamedQueryWithPaging(pageNumber);
System.out.println("current page "+page);
System.out.println("current page content"+page.getContent());
int current = page.getNumber() + 1;
int begin = Math.max(1, current - 5);
int end = Math.min(begin + 10, page.getTotalPages());
model.addAttribute("empList", page.getContent());
model.addAttribute("empPages", page);
model.addAttribute("beginIndex", begin);
model.addAttribute("endIndex", end);
model.addAttribute("currentIndex", current);
return "employeeWorkbench";
}
Run Code Online (Sandbox Code Playgroud)
服务
@Override
public Page<Employee> getAllEmployeesUsingNamedQueryWithPaging(Integer
pageNumber) {
PageRequest pageRequest =
new PageRequest(pageNumber - 1, PAGE_SIZE,
Sort.Direction.ASC, "id");
return
employeeDao.getAllEmployeesUsingNamedQueryWithPaging(pageRequest);
}
Run Code Online (Sandbox Code Playgroud)
道
@Transactional
public …Run Code Online (Sandbox Code Playgroud) hibernate spring-mvc data-paging spring-data-jpa spring-boot
Ayende描述了一种非常好的获取页面计数的方法,以及一个查询中的特定数据页面:
http://ayende.com/blog/2334/paged-data-count-with-nhibernate-the-really-easy-way
他的方法看起来像:
IList list = session.CreateQuery("select b, rowcount() from Blog b")
.SetFirstResult(5)
.SetMaxResults(10)
.List();
Run Code Online (Sandbox Code Playgroud)
唯一的问题是这个例子是在HQL中,我需要在ICriteria查询中做同样的事情.要达到与ICriteria相当的水平,我需要做类似的事情:
IList list = session.CreateCriteria<Blog>()
.SetFirstResult(5)
.SetMaxResults(10)
.SetProjection(Projections.RootEntity(), Projections.SqlFunction("rowcount", NHibernateUtil.Int64))
.List();
Run Code Online (Sandbox Code Playgroud)
问题是没有Projections.RootEntity()这样的东西.有没有办法选择根实体作为投影列表中的投影之一?
是的,我知道我可以使用CriteriaTransform.TransformToRowCount(),但这需要执行两次查询 - 一次用于结果,一次用于行计数.使用Futures可以通过将其减少到一次往返来帮助一点,但它仍然在SQL Server上执行两次查询.对于密集查询,这是不可接受的.我想避免开销,并在同一查询中返回行计数和结果.
基本问题是:使用ICriteria,有没有办法同时选择根实体和其他一些投影?
编辑:一些相关链接:
https://nhibernate.jira.com/browse/NH-1372?jql=text%20~%20%22entity%20projection%22
nhibernate projection rowcount data-paging nhibernate-criteria
好的,我的SQL Server数据库中有一个存储注释的表.我的愿望是能够使用我的数据列表中的[Back],[Next],页码和[Last]按钮来浏览记录.我认为最有效的方法是使用只返回特定范围内的特定行数的存储过程.这就是我想出的
@PageIndex INT,
@PageSize INT,
@postid int
AS
SET NOCOUNT ON
begin
WITH tmp AS (
SELECT comments.*, ROW_NUMBER() OVER (ORDER BY dateposted ASC) AS Row
FROM comments
WHERE (comments.postid = @postid))
SELECT tmp.*
FROM tmp
WHERE Row between
(@PageIndex - 1) * @PageSize + 1 and @PageIndex*@PageSize
end
RETURN
Run Code Online (Sandbox Code Playgroud)
现在一切正常,我已经能够在我的数据列表寻呼机中实现[Next]和[Back]按钮.现在我需要所有注释的总数(不在当前页面中),以便我可以在我的寻呼机上实现我的页码和[Last]按钮.换句话说,我想在第一个select语句中返回总行数,即
WITH tmp AS (
SELECT comments.*, ROW_NUMBER() OVER (ORDER BY dateposted ASC) AS Row
FROM comments
WHERE (comments.postid = @postid))
set @TotalRows = @@rowcount
Run Code Online (Sandbox Code Playgroud)
@@ rowcount不起作用并引发错误.我也无法计算.*也可以工作.
有没有其他方法来获得总行数或我的方法注定失败.
我有一个简单的datagrid示例与silverlight 3,并使用.NET Ria服务使用DomainDataSource以及DataPager声明性地填充它(在代码隐藏中没有任何内容),并且遇到了这个问题:
LoadSize为30,页面大小为15,加载页面时,第1页和第2页显示正确,但当我超出第2页时,网格中没有任何内容显示.
这曾经在使用.NET Ria服务的Mix 2009预览版的silverlight 3 beta中工作,我有一个非常简单的例子,并且已经验证了Web项目上的服务被调用以加载新的批处理,但是网格没有显示任何数据.
任何人都可以解释为什么网格只显示数据的初始加载而不是来自寻呼机的后续批次?
这是我的xaml:
<riaControls:DomainDataSource x:Name="ArtistSource" QueryName="GetArtist" AutoLoad="True" LoadSize="30" PageSize="15">
<riaControls:DomainDataSource.DomainContext>
<domain:AdminContext />
</riaControls:DomainDataSource.DomainContext>
</riaControls:DomainDataSource>
<data:DataGrid Grid.Row="1" x:Name="ArtistDataGrid" ItemsSource="{Binding Data, ElementName=ArtistSource}">
</data:DataGrid>
<StackPanel Grid.Row="2">
<data:DataPager Source="{Binding Data, ElementName=ArtistSource}" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud) 我有一个 MS Access 2003 数据库,其中有一个名为 的表,product1主键名为Product Code。没有自动 ID 列。
我已经使用这个sql来进行自定义数据分页。
SELECT *
FROM (
SELECT Top 1 -- = PageSize
*
FROM
(
SELECT TOP 1 -- = StartPos + PageSize
*
FROM product1
ORDER BY product1.[Product Code]
) AS sub1
ORDER BY sub1.[Product Code] DESC
) AS clients
ORDER BY [Product Code]
Run Code Online (Sandbox Code Playgroud)
现在我的问题是搜索。当我在数据库表中搜索某些内容并指向它时。
如何确保仍然分页正常工作?
data-paging ×8
database ×1
hibernate ×1
mongodb ×1
nhibernate ×1
pagination ×1
paging ×1
projection ×1
python ×1
rowcount ×1
spring-boot ×1
spring-mvc ×1
sql ×1
storage ×1