Oracle11g 使用IBatis(Oracle 11g数据库)中的RowHandler一次获取100行-示例
我需要从oracle数据库中获取200万条记录(1年数据)。Oracle11g 使用IBatis(Oracle 11g数据库)中的RowHandler一次获取100行-示例,oracle11g,ibatis,Oracle11g,Ibatis,我需要从oracle数据库中获取200万条记录(1年数据)。 当我将其作为列表检索时,它需要'n'分钟,并且挂起 sqlMap.queryForList("getResultSet", parameterMap); 因此,我尝试实现IBatis“RowHandler”接口,覆盖了“handleRow(Object obj)”,并且能够得到结果(一次一行) 但我需要在n>=1000的时间获取n行。因此,我在select语句中添加了fetchSize=“1000”和resultSetType=“F
当我将其作为列表检索时,它需要'n'分钟,并且挂起
sqlMap.queryForList("getResultSet", parameterMap);
因此,我尝试实现IBatis“RowHandler”
接口,覆盖了“handleRow(Object obj)”
,并且能够得到结果(一次一行)
但我需要在n>=1000的时间获取n行。因此,我在select语句中添加了fetchSize=“1000”和resultSetType=“FORWARD\u ONLY”
属性
例如:
当在查询执行期间调用该方法时,“List Size->”
始终递增1。但我预计增量率为1000(正如我所给出的fetchSize=“1000”)
当我用谷歌搜索出来时,有一个可用的属性(Driver.useCursorFetch
)可以与的“fetchSize”和“resultSetType”一起使用
参考:或。
但我认为它只适用于MySQL数据库。
Oracle 11g数据库的等效属性(Driver.useCursorFetch
)是什么。
我需要一些如下的配置
<bean id="sourceName" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@host:port:sid" />
<property name="username" value="$uname" />
<property name="password" value="$pwd" />
<!--
Some thing like this
<property name="configName(Instead of Driver.useCursorFetch)" value="true/false" />
-->
</bean>
提前谢谢。handleRow
只提供一行。使用fetchSize
,如果我正确理解您的场景,您应该能够删除handleRow
方法
如果确实需要单独处理每个rown,则可以使用私有列表创建一个有状态(非单例)RowHandler,并实现观察者模式,每次点击1000条记录时通知侦听器。handleRow
仅提供一行。使用fetchSize
,如果我正确理解您的场景,您应该能够删除handleRow
方法
如果您确实需要单独处理每个rown,您可以使用私有列表创建一个有状态(非单例)rownhandler,并实现观察者模式,在每次点击1000条记录时通知侦听器。谢谢Gabriel。。我正试图做的是“假设我的数据库中已经有1000万条记录,我必须从中提取100万条记录(比如1年的数据)。我不是一次从数据库中提取100万条记录,而是一次提取数千条记录,并一直提取,直到我使用“fetchSize”选项。但它是(fetchSize)一次获取一条记录(而不是1000条记录),直到所有100万条记录都被获取”。任何建议都是可以接受的。您可以创建一个自定义行处理程序,该处理程序具有行对象列表和计数器。在将rowhandler传递到iBATIS之前,请设置您的观察者()。然后,在handleRow
,counter++
和列表中添加(行)
。一旦计数器达到1000,通知观察者,发送列表并清除列表。谢谢Gabriel。我会试试的谢谢加布里埃尔。。我正试图做的是“假设我的数据库中已经有1000万条记录,我必须从中提取100万条记录(比如1年的数据)。我不是一次从数据库中提取100万条记录,而是一次提取数千条记录,并一直提取,直到我使用“fetchSize”选项。但它是(fetchSize)一次获取一条记录(而不是1000条记录),直到所有100万条记录都被获取”。任何建议都是可以接受的。您可以创建一个自定义行处理程序,该处理程序具有行对象列表和计数器。在将rowhandler传递到iBATIS之前,请设置您的观察者()。然后,在handleRow
,counter++
和列表中添加(行)
。一旦计数器达到1000,通知观察者,发送列表并清除列表。谢谢Gabriel。我会试试看。
<bean id="sourceName" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@host:port:sid" />
<property name="username" value="$uname" />
<property name="password" value="$pwd" />
<!--
Some thing like this
<property name="configName(Instead of Driver.useCursorFetch)" value="true/false" />
-->
</bean>