2014-04-12 48 views
0

请给我建议!我在servlet中获取表单数据并尝试更新数据库,但它不起作用。有数据库连接(没有servlet代码,任何数据都正确地添加到数据库中),但没有任何异常被抛出。 servlet获取参数 - 通过EL表达式在JSP中可用。我试图通过声明更新数据库,而不使用preparedStatement,但它没有帮助。这是代码:无法通过表单数据更新数据库

public class ServletClass extends HttpServlet { 
    @Override 
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
     DBConn dbConn = new DBConn(); 
     String number = req.getParameter("number"); 
     String amount = req.getParameter("amount"); 
     String date = req.getParameter("date"); 

     ArrayList list = dbConn.returnList(number, amount, date); 
     req.setAttribute("attr", list); 
     RequestDispatcher requestDispatcher = req.getRequestDispatcher("index.jsp"); 
     requestDispatcher.forward(req, resp); 
    } 
} 


public class DBConn { 

    public ArrayList<InvoicesBean> returnList(String number, String amount, String date) { 
     Connection connection = null; 
     Statement statement = null; 
     ResultSet resultSet = null; 
     ArrayList<InvoicesBean> beanList = new ArrayList<InvoicesBean>(); 
     PreparedStatement preparedStatement = null; 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/ved", "root", "1111"); 
      statement = connection.createStatement(); 
      preparedStatement = connection.prepareStatement("insert into invoices values(?, ?, ?);"); 
      preparedStatement.setString(1, number); 
      preparedStatement.setString(2, amount); 
      preparedStatement.setString(3, date); 
      preparedStatement.executeUpdate(); 
      resultSet = statement.executeQuery("SELECT * FROM invoices;"); 
      while (resultSet.next()){ 
       InvoicesBean invoicesBean = new InvoicesBean(); 
       invoicesBean.setNumber(resultSet.getString("number")); 
       invoicesBean.setAmount(resultSet.getString("amount")); 
       invoicesBean.setDate(resultSet.getString("date")); 
       beanList.add(invoicesBean); 
      } 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       if (resultSet != null) resultSet.close(); 
       if (statement != null) statement.close(); 
       if (connection != null) connection.close(); 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
     } 
     return beanList; 
    } 
} 

InvoiceBean级仅仅是一个标准的bean类的getter/setter方法

+0

您是否使用mysql客户端检查日期是否插入到数据库中?也调试你的代码,并检查结果集是否有任何价值,也许问题是你的jsp上没有显示数据 – fmodos

+0

是的,数据通过mysql命令行插入,如果我从std java类更新表。 ResulSet有值 - 我也检查过它。 – aime

回答

0
invoicesBean.setNumber(resultSet.getString("number")); 
      invoicesBean.setAmount(resultSet.getString("amount")); 
      invoicesBean.setDate(resultSet.getString("date")); 

你不能有数据库列名作为“数字”或“日期”。他们被保留。 再次检查列名称。 检查这是否是错误,您可以用列号1,2,3替换列名称。

+0

谢谢。是的,这很好。我发现最好使用列数)但真正的问题是在IDE(IntellijIDEA)中。它没有将jdbc-driver部署到该项目中。现在没问题。 – aime