将确认购物车插入数据库时发生Java MVC createsqlException(无法插入)
我需要有人帮我检查为什么数据没有记录到数据库中?当我尝试“签出”购物车时,购物车的记录应该执行sql语句将数据传输到数据库。下面是代码和错误:将确认购物车插入数据库时发生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
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();