【发布时间】:2013-07-16 11:05:50
【问题描述】:
我正在为学校目的构建一个简单的基于 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>
【问题讨论】:
-
从 products 表中删除产品的原因是什么?
-
我想将表“proizvodi”中购买的产品放入表“kupljeno”中,然后删除购买的产品,使其看起来像是已购买且不再可用。如何复制产品的 ID 并将其存储在“kupljeno”表的引用列中,然后删除“proizvodi”表中的该值?
-
那么,当一个用户购买产品时,是否不再可供其他用户购买?因为这就是效果。
-
是的,这正是我想要实现的目标。
-
为什么不在产品表中做库存栏,然后当单位有0个库存时它不能购买,当有1个库存时它可以购买。然后,当一个人被购买时,库存会因购买的库存数量而减少。
标签: mysql foreign-keys jsp-tags