Java 从PostgreSql数据库逐个获取记录
有一个数据库包含大约300-400条记录。我可以做一个简单的查询来获取30条记录,如:Java 从PostgreSql数据库逐个获取记录,java,hibernate,postgresql,Java,Hibernate,Postgresql,有一个数据库包含大约300-400条记录。我可以做一个简单的查询来获取30条记录,如: SELECT * FROM table WHERE isValidated = false LIMIT 30 关于DB表的内容,请多说几句。有一个名为isValidated的列,它可以(正如您正确猜测的)接受两个值之一:true或false。查询后,应验证某些记录(isValidated=true)。每30条记录中大约有5-6条记录。相应地,在每次查询之后,我将从以前的查询中获取记录(isValidated
SELECT * FROM table
WHERE isValidated = false
LIMIT 30
关于DB表的内容,请多说几句。有一个名为isValidated的列,它可以(正如您正确猜测的)接受两个值之一:true或false。查询后,应验证某些记录(isValidated=true)。每30条记录中大约有5-6条记录。相应地,在每次查询之后,我将从以前的查询中获取记录(isValidated=false)。事实上,我永远不会用这种方法结束谈判
验证过程是用Java+Hibernate完成的。我不熟悉Hibernate,所以我使用Criteria进行这个简单的查询
这类任务是否有最佳实践?添加标志字段(标记已获取的记录)的变体不合适(此数据库的工程设计过度)。
也许有机会创建一些虚拟表,在其中存储已处理的记录或类似的内容。顺便说一句,在处理完所有记录后,计划再次开始处理它们(其中一些记录可能需要验证)
提前感谢您的帮助。我可以想象几种解决方案:
where ID>:lastId
这是一种论文写作,请写得切中要害,并且可以理解。我看不出问题所在,获取所有(记住,没有数百万)需要更新的记录-更新那些需要更新的记录。如果需要,重复冲洗。我遗漏了什么?Bhavik Ambani:切中要害:如何获取特定数量的记录,而不重复已处理的记录。esej:一段时间后,可能会有数千条这样的记录,获取它们将是一个问题。@couling:PostgreSQL可以很好地处理大型数据集。您所需要做的就是告诉JDBC驱动程序不要将所有内容都加载到内存中。现在它有400条记录,下周将有数千条记录(是的,物体很重。我不太明白第二种变体。你能对此进行澄清或提供一些链接吗?我想这正是我需要的。第一页:你得到了按ID排序的30条未经验证的记录:
select*from table where validated=false order by ID limit 30
。你还记得最后一个ID:47。第二页:您将获得按ID排序的前30个未验证记录,其中ID大于47:select*from table where validated=false和ID>47 order by ID limit 30
。您还记得最后一个ID:122。等等。@a_horse_with_no_name good point,实际上您必须做两件事1:关闭自动提交myConnection.setAutoCommit(false)
和2:在运行查询之前设置语句的获取大小query.setFetchSize(30)
。