2017-09-16 78 views
-2

分析數據時,春回的NullPointerException我有一個代碼片段從數據庫

String sql = "SELECT * FROM merchantlist ORDER BY TransactionCount DESC LIMIT 10"; 
    Connection conn = null; 

    try { 
     List<String> merchantList = null; 
     conn = dataSource.getConnection(); 
     PreparedStatement ps = conn.prepareStatement(sql); 
     ResultSet rs = ps.executeQuery(); 
     if (rs.next()) { 
      merchantList.add(new String(rs.getString("MerchantName"))); 
     } 
     rs.close(); 
     ps.close(); 
     return new TopMerchants(merchantList); 
    } catch (SQLException e) { 
     throw new RuntimeException(e); 
    } finally { 
     if (conn != null) { 
      try { 
      conn.close(); 
      } catch (SQLException e) {} 
     } 
    } 
} 

我一邊跑這個Tomcat上得到一個異常 -

java.lang.NullPointerException 
com.cybs.impactanalysis.dao.impl.TopMerchantsDAOImpl.retrieveMerchantList(TopMerchantsDAOImpl.java:35) 
com.cybs.impactanalysis.controller.MerchantMonitoring.MerchantMonitoring(MerchantMonitoring.java:22) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
java.lang.reflect.Method.invoke(Method.java:498) 
org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) 
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) 
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116) 
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) 
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) 
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:620) 
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

當我運行存儲過程,我得到2行作爲輸出。該數據類型的配置是否正確(MERCHANTNAME列是VARCHAR(20))

我該如何解決這個問題?我試圖把它在調試模式下,但我無法看到的ResultSet

+0

@Ravi改變了代碼來創建一個新的字符串對象,但沒有工作。 –

回答

-1

值與new創建的字符串不會解決問題。因爲,它不是代替下面的代碼

List<String> merchantList = null; 

你無處創建ArrayList和使用它們直接啓動線造成NullPointerException

if (rs.next()) { 
     merchantList.add(new String(rs.getString("MerchantName"))); 
    } 

在的代碼merchantList上面的行仍然指向null參考。所以,你需要使用它們

List<String> merchantList = new ArrayList<>(); 

而且前創建ArrayList的實例,您應將下面的代碼

new String(rs.getString("MerchantName")) 

rs.getString("MerchantName") 

由於沒有必要創造new字符串對象。

+0

@Prateek納倫德拉你需要改變'if'到'while'。因爲'if'只會被執行一次,並且在第一次執行時會被執行。 – Ravi