【发布时间】:2013-01-18 03:57:34
【问题描述】:
我正在使用 JAVA 编写软件并使用 Oracle DB。
通常我们使用类似循环的方式从数据库中获取值
Resultset rt = (Resultset) cs.getObject(1);
while(rt.next){
....
}
但是从数据库中获取数千个数据时听起来会更慢。
我的问题是:
在 Oracle DB 中:我创建了一个像这样的过程,它是迭代数据并分配给游标。
Ex.procedure test_pro(sysref_cursor out info) as
open info select * from user_tbl ......
end test_pro;
在 JAVA 代码中:正如我之前提到的,我迭代 resultset 以获取值,但是在数据库方面,即使我选择了值,为什么要使用循环来获取该值?
(另一个事实在.net框架中,有使用数据库绑定的概念。java中的任何方式也是如此,像.net一样绑定数据库过程,而不需要迭代。 )
【问题讨论】:
-
没有循环就没有办法做到这一点.. :-)
-
@Praneeth 您的意思是说您的结果集将始终从数据库返回一行,并且在这种情况下您不希望在这里,因为它是单行输出?实际上,RESULT-SET 将允许我们迭代从数据库返回的单行的列。如果返回多行,那么我们需要 while() 来迭代多行。
-
@ Kanagavelu Sugumar。谢谢你的评论。我知道,但我需要知道任何用于数据库过程绑定的技术,如 vb.net。它总是与数据库连接。所以 .net 开发人员不要需要一个循环来获取值。
-
使用结果集可以让您逐一处理行,而使用
sys_refcursor不会改变这一点 - 您仍然需要遍历该游标。但这并不意味着您对每一行都访问数据库;司机每次行程都会缓存一个或多个行。见setFetchSize。那么您认为会很慢,还是您现在有问题? -
您在循环中实际在做什么?如果您正在为用户呈现东西,那么您无能为力。如果您正在对数据进行处理(交叉引用、汇总、计算),那么您很可能可以将该处理推回数据库并大幅提高性能。
标签: java oracle cursor fetch resultset