将确认购物车插入数据库时发生Java MVC createsqlException(无法插入)

将确认购物车插入数据库时发生Java MVC createsqlException(无法插入),java,model-view-controller,insert,connection,sqlexception,Java,Model View Controller,Insert,Connection,Sqlexception,我需要有人帮我检查为什么数据没有记录到数据库中?当我尝试“签出”购物车时,购物车的记录应该执行sql语句将数据传输到数据库。下面是代码和错误: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections" at sun.re

我需要有人帮我检查为什么数据没有记录到数据库中?当我尝试“签出”购物车时,购物车的记录应该执行sql语句将数据传输到数据库。下面是代码和错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection,  message from server: "Too many connections"
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.Util.getInstance(Util.java:386)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1015)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1112)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2486)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2519)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2304)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:834)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at sun.reflect.GeneratedConstructorAccessor12.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:416)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:346)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at servlet.TicketDataBean.getConnection(TicketDataBean.java:16)
Cart.java

package place;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class ConfirmPurchaseServlet
 */
@WebServlet("/ConfirmPurchaseServlet")
public class ConfirmPurchaseServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
        HttpSession session = request.getSession();

        Cart cart = (Cart) session.getAttribute("Cart");
        try{
            cart.finishtransaction();

        }catch(Exception e){e.printStackTrace();}
        response.sendRedirect(response.encodeRedirectURL("/ItineryAirport/CheckConfirmation.jsp")); //to another page
    }
    /**
     * @see HttpServlet#HttpServlet()
     */
    public BillServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

}
public void finishtransaction()throws Exception{
        Enumeration e = items.elements();
        connection = TicketDataBean.getConnection();
        statement = connection.createStatement();
        totalPrice=0.00;

        while (e.hasMoreElements()){
            Flight item = (Flight) e.nextElement();
            String itemQuantity = "" + item.getQuantity();
            totalPrice = totalPrice + item.getPrice() * Integer.parseInt(itemQuantity);
            String tourCode = item.getTourcode();

            String updateString = "INSERT INTO cart " +
            " Values (" + CARTID + ", '" +
            item.getTitle() + "', '" +
                    item.getAirline() + "', '" +
                    item.getTravelto() + "', '" +
                    item.getTravelfrom() + "', " +
            item.getPrice() + ", " +
                    item.getQuantity() + ") ";
            statement.executeUpdate(updateString);
            System.out.println(statement);
            CARTID++;
            }

    }

关闭语句和数据库连接。在添加代码时遇到问题-但是您需要一个try-and-finally块。在最后一个模块中,您可以调用

statement.close();
connection.close();
这些语句应该位于finishTransactions()方法底部的finally块中,或者不管该方法名是什么


因为错误显示您没有可用的连接。

更新了答案-应该在finishTransaction()方法的底部。错误似乎保持不变。有没有其他可能导致无法插入数据?结果如何?例外,什么都没有?statement.executeUpdate上的返回值将告诉您发生了多少次更新,是否检查?另外,您是否可以获取生成的SQL语句,并在命令行或GUI中对MySQL运行它,看看这是否有效?每次在循环中,您可能需要创建一个新语句。
statement.close();
connection.close();