【问题标题】:JSP form to JDBC using servlet使用 servlet 将 JSP 表单转换为 JDBC
【发布时间】:2015-06-04 15:08:33
【问题描述】:

我遇到了一些将 JSP 表单转换为 JDBC 的代码。 我在编码方面相对较新,但是在互联网上搜索了很长时间后,我仍然没有解决问题。 我需要以我的 jsp 形式将人们键入的数据“插入”到一个表中。

JSP:

<form action="CampaignToJDBC" method="post">
        Enter company name: <input type="text" name="pname" /><br/>
        Enter company email: <input type="email" name="pemail" /><br/>
        <input type="submit" value="Apply" />
</form>

小服务程序:

        Connection con = null;
        PreparedStatement ps = null;

        // ____________________________________________

        String pname = request.getParameter("pname");
        String pemail = request.getParameter("pemail");

        Class.forName(driver);
        con = DriverManager.getConnection(URL);
        String Query = "insert into campaigns(pname, pemail) values(?, ?)";
        ps = con.prepareStatement(Query);
        ps.setString(1, pname);
        ps.setString(2, pemail);

        ps.executeUpdate();

SQL:

DROP TABLE campaigns; 

CREATE TABLE campaigns(
Pname varchar2(32),
Pemail varchar2(32)
);

我的问题是它没有将它插入到数据库中,并且根据我新获得的经验,我不知道为什么。我查了几个例子,但它们看起来都像我的。

  • 亚历山大

完整的服务:

@WebServlet(name = "CampaignToJDBC", urlPatterns = {"/CampaignToJDBC"})
public class CampaignToJDBC extends HttpServlet {
public static String driver = "oracle.jdbc.driver.OracleDriver";
public static String URL = "jdbc:oracle:thin:@datdb.cphbusiness.dk:1521:dat";
public static String ID = "";
public static String PW = "";
private int id = 0;
Connection con = null;
PreparedStatement ps = null;

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    String pname = request.getParameter("pname");
    String pemail = request.getParameter("pemail");

    try {
        Class.forName(driver);
        con = DriverManager.getConnection(URL, ID, PW);
        String Query = "insert into campaigns(Pname, Pemail) values(?, ?)";
        ps = con.prepareStatement(Query);
        ps.setString(1, pname);
        ps.setString(2, pemail);

        ps.executeUpdate();

        id = id + 1;
    } catch (Exception e) {

    } finally {
        try {
            ps.close();
        } catch (SQLException ex) {
            Logger.getLogger(CampaignToJDBC.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            con.close();
        } catch (SQLException ex) {
            Logger.getLogger(CampaignToJDBC.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    RequestDispatcher rd = request.getRequestDispatcher("display.jsp");
    rd.forward(request, response);
}

// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
 * Handles the HTTP <code>GET</code> method.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}

/**
 * Handles the HTTP <code>POST</code> method.
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}

/**
 * Returns a short description of the servlet.
 *
 * @return a String containing servlet description
 */
@Override
public String getServletInfo() {
    return "Short description";
}// </editor-fold>
}

【问题讨论】:

  • 那到底是servlet里面的那一行??并且请为您的 servlet 类提供完整的代码。
  • 关闭连接。这里很好Example
  • 你有 try catch 块吗?如果是这样,它会抛出任何异常吗?
  • 检查异常
  • 好的,我添加了一个完整的 servlet。但是我尝试检查异常,我不得不承认我并不完全理解它们

标签: java jsp servlets jdbc


【解决方案1】:

请将您的业务逻辑与 JSP 和 Servlet 端分开。为逻辑创建一个单独的类,比如说管理器/控制器或其他东西。在那里实现逻辑并从控制台或单元测试中尝试。

如果它工作正常,则从您的 Servlet 调用该方法。 首先,尝试使用常量参数。 查看日志文件,生成日志信息或使用 System.out.println();看看发生了什么。在日志中搜索异常。

SELECT 查询在 Servet 中有效吗?表示连接良好。 试着靠近一点。

【讨论】:

  • 我用 System.out.println("Driver Succesful"); 尝试了你所说的。并看了看日志。 (正如我所说,我对此很陌生)。这是 GlassFish 服务器告诉我的:Info: Driver succesful Info: ERROR Info: Driver succesful Info: ERROR Info: Driver succesful Info: ERROR 所以看起来是连接失败):
  • 好的。请将错误日志(堆栈跟踪)复制到您的问题中。在 Glassfish 中,您可以使用连接池,因此您可以在管理控制台中尝试数据库连接。
【解决方案2】:

问题已解决。

代码是正确的,但我忘了添加我需要的驱动程序。所以我所做的就是添加带有驱动程序的库并且它工作。对不起,我的错!

感谢大家的帮助:)

【讨论】:

    猜你喜欢
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 2018-07-11
    相关资源
    最近更新 更多