即時通訊使用sun.jdbc.odbc.JdbcOdbcDriver中連接到Oracle database.I知道,我將可能是最好使用薄的驅動程序JDBC ODBC驅動程序獲取大小,但我想要的應用,而無需指定工作數據庫服務器名稱和端口號。我的連接字符串就像jdbc:odbc:DSN。如何設置
,我在我的應用程序執行的查詢可能會返回rows.All的millons數據很重要,所以我不能限制他們中的query.My關心的是我的Java應用程序運行到內存的問題。
當我檢查它的語句的獲取大小時,它被設置爲1.這看起來非常不是最優的(一個查詢檢索45K行花了13分鐘),我希望獲取大小至少爲500以提高性能。
我的理解是執行我的查詢時,(我使用的聲明)Statement對象指向數據庫的結果,我使用迭代一個結果。每次執行resultSet.next()時,resultSet都會觸發數據庫以獲取n個no行(其中n是獲取大小)。這個解釋是否正確?如果是這樣,這意味着我的應用程序將從來沒有面對任何內存不足的問題,直到我的抓取大小是如此之大,JVM得到淹沒?
當我在創建語句之後執行stmt.setFetchSize()時,我得到一個無效的獲取大小sql異常。如果將stmt.setMaxRows()設置爲大於獲取大小的值,我能夠避免此異常。但
1.我不希望我的結果被限制爲MaxRows值。
2.嘗試將最大行設置爲一個巨大的值,並試圖獲取500的大小,但沒有看到時間的改善。
請幫我找出我如何可以設置一個有效的獲取大小,並獲得相同的驅動程序的一些improvement.Any其他優化建議,將不勝感激。
感謝,
下跌
非常感謝! 我不知道使用TNS別名的瘦驅動程序。 這解決了我所有的UNIX問題。 有什麼辦法可以提取在ODBC驅動程序配置中指定的服務器/實例名稱? – Fell 2009-09-26 09:43:35
ODBC驅動程序配置存儲在Windows的註冊表或Unix中的配置文件中。無論哪種情況,都應該可以編寫一個能夠提取該信息的小應用程序。 – 2009-09-26 19:25:12
再次感謝。我的應用程序現在運行良好! – Fell 2009-09-28 11:29:46