2017-11-03 9 views
-1

Oracleで新しい簡単なSELECTクエリがあります。executeQuery()メソッドの処理時間はどのくらいですか?

私がSQLツールを実行する場合、1〜3秒かかります。

しかし、そのはとても時間がかかるのはなぜのexecuteQuery()メソッドを使用して、Java JDBCに、それは30〜40秒

を取りますか?私はこの問題を解決するために何を考えますか?

私はちょうど私のJavaソース をアップロードしても、setFetchSizeと自動コミット/トランザクションモードのようないくつかのネジがあります

pstmt = con.prepareStatement(Query); 
    pstmt.setString(1, model.B_BasicDate); 
    pstmt.setString(2, GL_bfMonth); 
    pstmt.setString(3, GL_bfDay); 
    **rs = new DmdResultSet(pstmt.executeQuery()); // it takes 35 seconds** 
    int colCount  = rs.getColumnCount(); 
    Vector innV  = null; 
    while(rs.next()) { 
     innV  = new Vector(); 
     for (int i = 1 ; i <= colCount; i++) { 
      innV.addElement(rs.getString(i)) ; 
     } 
     outV.addElement(innV); 
    } 
+0

実行したいコードとSQ​​Lクエリを投稿してください。 :) – Noixes

+0

@kitonleeはクエリでコードを提供します –

+0

@kitonleeあなたの答えを編集してそこにコードを投稿すると、コメントセクションはそれを行う適切な場所ではありません –

答えて

0

アップロードFO長すぎるアップロード を照会することはできません初心者

のために助けてください。 ただし、最初にバルク作業を行っているときに、より多くのメモリ(java -Xmx = ...)、 でアプリケーションを実行してみてください。

効率上のとおり、それらの最初の使用に近い

  • 宣言。ループ内で のストレージが変更されません。
  • ベクターは非常に古いクラスです。 (配列)リストを使用する。それはより速いです。
  • SELECT many fieldsは、特にCLOBなどでは非効率的です。だから、

:ところで方法により

// The normal I use, but there are faster ones 
connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); 
connection.setReadOnly(true); 

List<List<String>> outV = new ArrayList<>(); 
while (rs.next()) { 
    List<String> innV = new ArrayList<>(colCount); 
    for (int i = 1 ; i <= colCount; i++) { 
     innV.add(rs.getString(i)) ; 
    } 
    outV.add(innV); 
} 

は、変数名とフィールド名は、アンダースコアなしで、小さな文字で始まり、キャメルケースでなければなりません。これは、Javaファミリの厳密な規約です。

+0

あなたに感謝していただきありがとうございます –

関連する問題