连接到给出空指针异常的数据库的方法



目前我有一个名为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) {
        }
    }
}

}

重写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。

最新更新