2016-03-07 66 views
0

我面臨性能問題與我的sql服務器,當我試圖連接使用Java應用程序。 sqljdbc4-4.0是我的驅動程序版本。看起來這是可用於此的最新版本。我的服務器結果集花費很長時間while循環通過

問題出現在我將PreparedStatemnt與set paramerter選項一起使用時,以及在特定次數的迭代之後循環通過結果集時,執行停止amost 5min並重新開始迭代。這在一些固定的迭代中發生。

即使是像下面這樣的非常簡單的查詢,也會出現這種情況。

PreparedStatemnt ps = null; 
ResultSet rs = null; 
ps = con.prepareStatemnt("select id,name,phone from Table1 where name = ?"); 
ps.setString(1, "Raj"); 

rs = ps.executeQuery(); // OK here 
int i=0; 
while(rs.next()){   // hangs here 
    System.out.println(i++); 
} 

但是,如果我沒有設置的參數和參數串聯到這樣的查詢,

PreparedStatemnt ps = null; 
ResultSet rs = null; 
ps = con.prepareStatemnt("select id,name,phone from Table1 where name = 'Bob' "); 

rs = ps.executeQuery(); // OK here 
int i=0; 
while(rs.next()){   // OK now 
    System.out.println(i++); 
} 

當我使用的查詢沒有WHERE條件也沒有運行完全正常工作掛。

這告訴我,當我使用set參數選項時出現問題。我試圖用頂行來查看問題是否與大量的行有關。但即使當我用100設置頂端。對於這100行本身,迭代在第28次迭代和第66次迭代時停止2次。我認爲它掛起的迭代取決於列數的大小。

有人可以幫我解決問題。

在此先感謝, Syam。

回答

0

您的數據庫中有更多,更多的Rajs比Bobs。

它與您是否使用PreparedStatement參數無關。

+0

我在第二個查詢本身嘗試了「Raj」。即使這樣,它也跑得很快。我甚至嘗試過使用日期範圍,比如從'2011/02/25'和'2011/02/27'之間的Date1中選擇id,姓名,電話等條件。結果是一樣的,在28日和66日需要很長時間。 –