websphere日誌分析——程式隱患問題

CloudSpace發表於2010-03-03
程式往往在我們使用的過程中並不會在頁面顯示什麼異常,但是後臺卻報了嚴重的錯誤,原因是對於資料的處理和傳輸不嚴謹,比如查詢無資料的處理、查詢條件有NULL值、或者查詢返回資料過大等等。

 

(1)連線物件 

[08-12-3 8:49:10:993 CST] 0000065e SystemErr R java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1

ORA-01000: maximum open cursors exceeded

    這個問題和WAS也有一定的關係,隨WAS版本不同,其JDBC對於PreparedStatement快取設定也不同,在我們們的程式中,如果出現這個問題,說明PreparedStatement

\Statement物件的引用,並沒有關閉。

      

       一般程式上

      pstmt = connection.prepareStatement(...);

      pstmt.executeUpdate();

   這樣來使用,所以我們還需要加入一句

   pstmt = connection.prepareStatement(...);

      pstmt.executeUpdate();

      pstmt.close();

       這樣就可以有效的防止此類問題的發生,也不容易造成記憶體溢位的錯誤。

       如果不及時關閉的話,DBMS會分配一個指標,實時對PreparedStatement物件進行遍歷,加大系統開銷。

     通過檢視VSS上原始碼,發現很多資料庫連線物件都沒有關閉,有很多沒有關閉的,還有的是寫了關閉,但似乎沒有執行到,如下

 

  finally {

                    try {

                           if (!conn.isClosed()) {

                                  if (!conn.getAutoCommit()) {

                                         conn.rollback();

                                         conn.setAutoCommit(true);

                                         log

                                                       .error("TacticSearchServlet|Error while closing connection.");

                                 }

                                  conn.close();

                           }

                    } catch (Exception e) {

                           System.out.println("異常:"+e.getMessage());

                    }

 

   執行finally的時候,如果出錯了,那麼就進入了finallycatch,而finally try中才有資料連線物件的關閉。

   綜上所述,需要開發檢查PreparedStatement物件和Connection物件的關閉情況

 

(2)型別轉換

[08-12-3 9:00:12:092 CST] 00000681 SystemErr R java.lang.NumberFormatException: For input string: ""

    從錯誤日誌找到當時是執行com.hss.mcs.report.servlet.Sale_Analysis_Servlet,檢視程式碼發現,這個屬於“資料營銷平臺—資料銷售分析”呼叫的,檢視程式碼,發現是int I_jgbs=(new Integer(I_jgbs1)).intValue()這裡對資料型別進行了轉化,而I_jgbs1這個引數會取到空值,所以程式對轉化也需要做一個修改。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14789789/viewspace-628463/,如需轉載,請註明出處,否則將追究法律責任。

相關文章