连接到DB的方法,给出空指针异常

时间:2017-10-12 12:32:27

标签: java mysql servlets

目前我有一个名为work的java对象,该对象里面有这个方法。

public void Connection(Connection conn) throws NamingException, SQLException {


    // Setup the Database datasource
    Context ctx = new InitialContext();
    Context env = (Context) ctx.lookup("java:comp/env");
    DataSource ds = (DataSource) env.lookup("jdbc/carRentalSystem");
    conn = ds.getConnection();
}

我在servlet中调用此方法连接到我的数据库并添加一个表行。因为什么原因我在通过调试运行时不断获得空指针异常。任何人都可以指导我如何使其正常工作吗?

protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

    // Obtain submitted form data

    Work work = new Work();
    String firstName = req.getParameter("First_Name");
    String lastName = req.getParameter("Last_Name");
    String username = req.getParameter("User_Name");
    String email = req.getParameter("Email_Address");
    String password = req.getParameter("Password");

    ResultSet rs = null;
    Connection conn = null;
    Statement st = null;

    try {
        work.Connection(conn);


        // Prepare the SQL statmenet to insert the values

        PreparedStatement stmt = conn.prepareStatement("INSERT INTO userdetails(First_Name, Last_Name, Email_Address, Password, User_Name)  VALUES (?,?,?,?,?)");
        stmt.setString(1, firstName);
        stmt.setString(2, lastName);
        stmt.setString(3, email);
        stmt.setString(4, password);
        stmt.setString(5, username);

        // Execute the insert
        stmt.executeUpdate();
        conn.close();

        // Dispatch into success page
        RequestDispatcher requestDispatcher = req.getRequestDispatcher("login.jsp");
        requestDispatcher.forward(req, res);
    } catch (Exception e) {
        work.ErrorHome(req, res, e);
    } finally {
        try {
            if (st != null)
                st.close();
        } catch (java.sql.SQLException e) {
        }
        try {
            if (conn != null)
                conn.close();
        } catch (java.sql.SQLException e) {
        }
        try {
            if (rs != null)
                rs.close();
        } catch (java.sql.SQLException e) {
        }
    }
}

}

1 个答案:

答案 0 :(得分:1)

重写您的Connection(Connection conn)方法,如下所示:

public Connection createConnection() throws NamingException, SQLException {
    // Setup the Database datasource
    Context ctx = new InitialContext();
    Context env = (Context) ctx.lookup("java:comp/env");
    DataSource ds = (DataSource) env.lookup("jdbc/carRentalSystem");
    return ds.getConnection();
}

稍后,在您的源代码中使用:

conn = work.createConnection();

而不是:

work.Connection(conn);

这应该避免你的NPE。