基本的に、Web アプリケーションには 2 つのクラスがあります。1 つのクラス 'FormProcess.java' は、HTML フォームに情報を挿入し、いくつかの計算を実行して、結果を HTML として出力します。これは絶対にうまくいきます。
MySQL データベースの新しい行にデータを追加するためのクラスもあります。このクラスは「SqlConnect.java」と呼ばれます。これは、サーバー上で個別に実行した場合にも正常に機能します (つまり、テーブルに行を正しく挿入します)。
私が苦労しているのは、SqlConnect メソッドを FormProcess クラスから実行することです。FormProcess に以下を追加すると:
private SqlConnect sql;
そしてメソッドで:
sql.doPost(request, response);
次のエラーが表示されます。
java.lang.NullPointerException
crunch.FormProcess.doGet(FormProcess.java:27)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
これは現時点での SqlConnect クラスです (インポートなどは省きました)。
@WebServlet(name="sql",urlPatterns={"/sql"})
public class SqlConnect extends javax.servlet.http.HttpServlet {
FormProcess process = new FormProcess();
private static final long serialVersionUID = 1L;
public SqlConnect() {
}
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
performTask(request, response);
}
public void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
performTask(request, response);
}
public void performTask(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
testJndiDataSource();
}
public void testJndiDataSource() {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/CrunchDB");
conn = ds.getConnection();
st = conn.createStatement();
st.executeUpdate("INSERT INTO log " + "VALUES (20, '1', '1', " + process.salaryInt + ", "+ process.takeHomePAYE +", "+ process.takeHomeContractor +", 2)");
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try { if (rs != null) rs.close(); } catch (SQLException e) { e.printStackTrace(); }
try { if (st != null) st.close(); } catch (SQLException e) { e.printStackTrace(); }
try { if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); }
}
}
}
これを行う簡単な方法があると確信していますが、SqlConnect クラスはそれ自体で正常に実行されると言ったので、うまくいきません。
乾杯