2015-02-09 63 views
0

請幫助我在servlet的 我想在init方法初始化值和 後使用它們,但我得到的NullPointerException 新的,這是我的CLASSE你好它含有2個方法init()和jdbcinfo() 我需要獲取數據庫連接,一旦java servlet如何從init()方法獲取值並在方法外使用它們?

package com.Ws; 
    //imports..  
    public class Hello extends HttpServlet { 

     public static Connection con; 


     @Override 
     public void init() throws ServletException 
     { 





        try { 
        Class.forName("net.sourceforge.jtds.jdbc.Driver"); 
        con =DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:6543/Dbname","user",""); 


       } catch (ClassNotFoundException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
        System.out.println("--printStackTrace--"+e); 

       } catch (SQLException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
        System.out.println("--printStackTrace2--"+e); 
       } 
       } 


    } 
    //I get nullpointerexception here con = null 

     public String jdbcInfo(String req) { 

      PreparedStatement statementT; 

      try { 




    connection =con; 

       PreparedStatement statement = connection.prepareStatement(req); 
       ResultSet result = statement.executeQuery(); 

       while (result.next()) { 

        /// 

       } 
      } 

      catch (Exception e) { 
       e.printStackTrace(); 
       System.out.println("exception: Serveur base de donnée indosponnible"); 

      } 



      if (res == "1") 
       return res; 
      else 
       return "false"; 
     } 



     } 

我的web.xml

<servlet> 
    <servlet-name>Hello</servlet-name> 
    <servlet-class>com.Ws.Hello</servlet-class> 
    <load-on-startup>1</load-on-startup> 

</servlet> 
+2

您的代碼不能編譯。你不能在函數外面有'System.out.println(「返回值+名稱);''。 – Jens 2015-02-09 12:26:10

+0

你不重寫contextDestroyed(ServletContextEvent arg0)方法也是一個錯誤! – Prashant 2015-02-09 12:33:24

+1

和你在哪裏得到異常? – Prashant 2015-02-09 12:37:54

回答

0

@ geert3是正確的。您不想創建連接並將其保存在servlet的init()方法的字段中。 Servlet是singletonscan可處理來自多個線程的請求,因此所有字段都應引用非常不可變且線程安全的對象。 Connection對象是其他的。您可以使用database connection pool。不要建立自己的連接池代碼;那裏有manychoicesout。如果您在應用程序服務器中運行代碼,則您的應用程序服務器可能具有內置數據庫池支持。

至於代碼的特定問題,故障排除它的最佳方法是查看打印的堆棧跟蹤。

0

//我得到的NullPointerException這裏CON = NULL

類連接con你的實例變量可以爲空,如果它沒有得到初始化。現在,這怎麼可能:

在這條線

Class.forName("net.sourceforge.jtds.jdbc.Driver"); 

如果jar文件中不存在的類路徑這條線將拋出ClassNotFoundException在這種情況下,它出來try塊而不執行這條線

con =DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:6543/Dbname","user",""); 

在這種情況下您con將是無效 所以只檢查jar文件在類路徑中實際存在或不

相關問題