繁体   English   中英

如何设置jdbc odbc驱动程序的获取大小

[英]how to set fetch size for jdbc odbc driver

我使用sun.jdbc.odbc.JdbcOdbcDriver连接到oracle数据库。我知道我可能会更好地使用瘦驱动程序,但我希望应用程序工作而不指定数据库服务器名称和端口号。我的连接字符串是像jdbc:odbc:DSN。

我在我的应用程序中执行的查询可能返回毫安行。所有数据都很关键,所以我不能在查询中限制它们。我担心的是我的java应用程序遇到了内存问题。

当我检查语句的提取大小时,它被设置为1.这似乎非常次优(查询检索45K行花费了13分钟)给我,我希望获取至少500的提取大小以便改进性能。

我的理解是,当我的查询被执行时(我正在使用Statement),语句对象指向数据库上的结果,我使用ResultSet进行迭代。 每次执行resultSet.next()时,resultSet都会命中数据库以获取n个行(其中n是获取大小)。 这种解释是否正确? 如果是这样意味着我的应用程序永远不会遇到任何内存不足问题,直到我的获取大小太大以致JVM被淹没?

当我在创建语句后执行stmt.setFetchSize()时,我得到一个无效的提取大小sql异常。如果我将stmt.setMaxRows()设置为比获取大小更大的值,我可以避免此异常。但是
1.我不希望我的结果限制在MaxRows值。
2.尝试将最大行设置为一个巨大的值,并尝试获取大小为500,但没有看到时间的改善。

请帮我弄清楚如何设置有效的获取大小并获得一些改进。对于同一个驱动程序的任何其他优化建议将不胜感激。

谢谢,
费尔

我在很多年没有使用过JDBC-ODBC桥,但我希望ODBC驱动程序的提取大小可以控制。 您使用什么ODBC驱动程序以及您使用的ODBC驱动程序版本是什么? DSN中指定的提取大小是多少?

作为一个单独的问题,我会严肃地质疑你在这个时代使用JDBC-ODBC桥的决定。 JDBC驱动程序可以使用TNS别名,而不是显式指定比ODBC DSN更难配置的主机和端口。 并且摆脱了安装,配置和维护ODBC驱动程序和DSN的要求,极大地提高了性能和可维护性。

使用JDBC。 使用ODBC桥没有任何优势。 在PreparedStatement或CallableStatement中,您可以调用setFetchSize()来限制行集大小。

你确定获取大小在Sun的ODBC-JDBC驱动程序中有什么不同吗? 我们几年前用Java 5尝试过它。该值已设置,甚至已经过验证但从未使用过。 我怀疑它仍然如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM