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