Мой оператор удаления не работает, я пытаюсь удалить дублирующую строку, если пользователь ввел более одного product_id и user_id, но удаление не работает вообще.
Я пытался ввести одну строку несколько раз и hasNext
возвращает true, сбрасывается, но не выполняет удаление и предупреждение
Код:
<%--
Document : cart
Created on : Apr 24, 2020, 3:43:01 PM
Author : user
--%>
<%@page import="java.sql.CallableStatement"%>
<%@page import="java.sql.SQLException"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%@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>
<%
String username=(String)session.getAttribute("username");
String product_id=request.getParameter("id");
Connection con=null;
Statement stmt=null;
Statement stmt1=null;
Statement stmt2=null;
try{
Class.forName("oracle.jdbc.OracleDriver");
con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","admin","admin");
}
catch(ClassNotFoundException e){
System.out.println("Class not found :"+e.getMessage());
}
try{
int user_id=0;
stmt=con.createStatement();
stmt1=con.createStatement();
stmt2=con.createStatement();
//check for duplicate rows to avoid user adding to cart the same item again.
ResultSet rs=stmt.executeQuery("SELECT user_id FROM users where user_name='"+username+"'");
while(rs.next()){
user_id=Integer.valueOf(rs.getString(1));
System.out.println(user_id);
}
stmt1.executeUpdate("INSERT INTO transaction (user_id,product_id) values('"+user_id+"','"+product_id+"')");
ResultSet rs_check=stmt.executeQuery("SELECT '"+user_id+"','"+product_id+"', COUNT(*) occurences from transaction GROUP BY '"+user_id+"','"+product_id+"' HAVING COUNT(*) > 1 ");
//check for duplicate rows after insert and then delete that row
System.out.println(rs_check.next());//1)false
boolean hasNext=rs_check.next();
if(hasNext){
//stmt2.executeUpdate("delete from transaction where user_id='"+user_id+"' and product_id='"+product_id+"'");
CallableStatement ctmt=con.prepareCall("{call delete_dup(?,?)}");
ctmt.setInt(1,user_id);
ctmt.setInt(2,Integer.valueOf(product_id));
ctmt.execute();
%><script>alert("you have added the item before?");</script><%
}
}
catch(SQLException e){
System.out.println("SQL Exception: "+e.getMessage());
}
%>
</body>
</html>