我正在为学校目的构建一个简单的基于 Web 的应用程序,它应该使某些用户能够购买他们从下拉菜单中选择的某些产品。每当用户点击购买他们从下拉菜单中选择的产品时,该产品就会存储到已购买项目表中,同时会从另一个名为 products 的表中删除。据我所知,为了能够做到这一点,我需要有 3 个表:用户、产品、购买,在购买表中我应该有 2 列外键,对于购买者来说是 #1,对于购买者来说是 #2购买的产品。我以为我解决了这个问题,但我的 glassfish 服务器不断向我抛出以下错误:
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:
无法添加或更新子行:外键约束失败
(`webprodaja`.`kupljeno`,约束`kupljeno_ibfk_1`外键(`id`)参考users
(`id` ))
好的,这是有问题的表和外键:
表“用户”:
id | name
1 | Ivan
2 | Beka
3 | Ogi
表“proizvodi”(英语产品):
id | name
1 | kafa
2 | jafa
3 | ratluk
表“kupljeno”(英文购买):
id | name | proizvod
2 | Beka | 3
3 | Ogi | 2
表 'kupljeno' 也有 2 个外键:
一个放在“id”列上并引用表“users”及其列“id”;
另一个放在“proizvod”列上并引用表“proizvodi”及其列“id”;
所以我要做的是删除买家选择的任何产品,并在“proizvod”列中删除其名称,因此将相同的产品放入“kupljeno”列。但是,我能够进行购买并将详细信息存储到“kupljeno”列中,但由于某种原因,我不能再这样做了,更不用说在“proizvod”列中删除正在购买的产品了。
此外,这里是完整的 index.jsp 代码:
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/webprodaja","root","");
Statement st = conn.createStatement();
// if(request.getParameter("add")!=null){
ResultSet rs = st.executeQuery("select * from users");
%>
<form action="index.jsp" method="post">
<select name="user">
<%
while(rs.next())
{
String name=rs.getString(2);
String id = rs.getString(1);
%>
<option value="<%=name%>" ><%=name%></option>
<%
}
%>
</select>
<%
ResultSet rs1 = st.executeQuery("select * from proizvodi");
%>
<select name="proizvod">
<%
while(rs1.next())
{
String name1=rs1.getString(2);
String id1 = rs1.getString(1);
%>
<option value="<%=id1%>" ><%=name1%></option>
<%
}
%>
</select>
<input type="submit" name="add" value="buy"/>
</form>
<%
if(request.getParameter("add")!=null)
{
String user = request.getParameter("user");
String proizvod = request.getParameter("proizvod");
st.execute("insert into kupljeno(id, name, proizvod) values (null, '"+user+"', "+proizvod+")");
}
%>
<%-- <form action="index.jsp" method="post">
<input type="submit" name="add" value="buy">
</form> --%>
</body>
</html>