Java JSP中的删除不起作用(表不存在)

Java JSP中的删除不起作用(表不存在),java,postgresql,jsp,Java,Postgresql,Jsp,我有一个简单的JSP,它对我的简单数据库的表进行选择,并显示结果: <%-- <%@page import="javax.swing.JOptionPane"%> <%@page import="java.sql.PreparedStatement"%> <%@page import="java.sql.ResultSet"%> <%@page import="java.sql.DriverManager"%> <%@page i

我有一个简单的JSP,它对我的简单数据库的表进行选择,并显示结果:

<%-- 


<%@page import="javax.swing.JOptionPane"%>
<%@page import="java.sql.PreparedStatement"%>
<%@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"
        import="model.User"%>

<%!  public void deleteUser(int id) {

        Connection c1 = null;
        PreparedStatement ps = null;
        try {
            Class.forName("org.postgresql.Driver");
            c1 = DriverManager
                    .getConnection("jdbc:postgresql://localhost:5432/postgres",
                            "postgres", "admin");
            c1.setAutoCommit(false);
            System.out.println("Opened database successfully" + "\n");

            System.out.println("PROVA PROVA PROVA" + "\n");

            ps = c1.prepareStatement("DELETE FROM users WHERE user_id = ? ");
            ps.setInt(1, id);
            ResultSet rs1 = ps.executeQuery();

            rs1.close();
            ps.close();
            c1.close();

            JOptionPane.showInputDialog("Player Deleted");

        } catch (Exception e) {
            System.err.println(e.getClass().getName() + ": " + e.getMessage());
            System.exit(0);
        }
    }
%>

<!DOCTYPE html>


<head>
    <link rel="stylesheet" type="text/css" href="layout.css">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Registered users</title>
<input Type="BUTTON" Value="Home Page" onclick="location.href = 'index.html'"> 
</head>
<body>
    <h1>Registered users</h1>
    <p>
        <%
            Connection c = null;
            Statement stmt = null;
            try {
                Class.forName("org.postgresql.Driver");
                c = DriverManager
                        .getConnection("jdbc:postgresql://localhost:5432/firstapp",
                                "postgres", "admin");

                c.setAutoCommit(false);
                System.out.println("Opened database successfully" + "\n");

                stmt = c.createStatement();
                ResultSet rs = stmt.executeQuery("SELECT * FROM users;");

                while (rs.next()) {
                    int id = rs.getInt("user_id");
                    String firstname = rs.getString("firstname");
                    String lastname = rs.getString("lastname");
                    String country = rs.getString("country");

                    User u = (User) request.getAttribute("user"); %>


        First Name: <% out.print(firstname); %> <br/>
        Last Name: <% out.print(lastname); %> <br/>
        Country: <% out.print(country); %> <br/>

        <input Type="BUTTON" Value="Delete" onclick=<%deleteUser(id);%>>
    <p/>
    <%
            }
            rs.close();
            stmt.close();
            c.close();

        } catch (Exception e) {
            System.err.println(e.getClass().getName() + ": " + e.getMessage());
            System.exit(0);
        }%>
</p>
</body>

您已将自动提交设置为false

c.setAutoCommit(false)

因此,我认为您需要在执行delete语句之后提交事务


c.commit()

您已将自动提交设置为false

c.setAutoCommit(false)

因此,我认为您需要在执行delete语句之后提交事务

c.commit()

应该是

ps.executeUpdate();
移除

JOptionPane.showInputDialog("Player Deleted");
您可以在那里填充一个字符串变量以在HTML中显示。 (JOptionPane是swing,桌面应用程序的GUI。)


应该是

ps.executeUpdate();
移除

JOptionPane.showInputDialog("Player Deleted");
您可以在那里填充一个字符串变量以在HTML中显示。 (JOptionPane是swing,桌面应用程序的GUI。)


另外,
您的代码中几乎没有问题:

  • deleteUser
    中的连接字符串与JSP的主要部分中的连接字符串不同。这就是为什么找不到
    Users
    表的原因
  • Java
    在服务器上执行代码;在浏览器接收页面之前。因此,您无法按预期在
    onClick
    上调用Java代码。在代码中,一旦显示记录,实际上就是在删除记录
  • 正如其他人提到的
    JOptionPane.showInputDialog(“播放器已删除”)将不起作用,因为它是对Swing对象的调用,该对象在桌面GUI中使用
  • 不要将SQL放在JSP(或Java scriplets)中。(请注意,我了解您目前正在学习,您需要逐步进步,因此这是可以接受的)
  • 正如Joop提到的,使用
    ps.executeUpdate()用于删除

  • 正如joop也提到的,删除
    代码中几乎没有问题:

  • deleteUser
    中的连接字符串与JSP的主要部分中的连接字符串不同。这就是为什么找不到
    Users
    表的原因
  • Java
    在服务器上执行代码;在浏览器接收页面之前。因此,您无法按预期在
    onClick
    上调用Java代码。在代码中,一旦显示记录,实际上就是在删除记录
  • 正如其他人提到的
    JOptionPane.showInputDialog(“播放器已删除”)将不起作用,因为它是对Swing对象的调用,该对象在桌面GUI中使用
  • 不要将SQL放在JSP(或Java scriplets)中。(请注意,我了解您目前正在学习,您需要逐步进步,因此这是可以接受的)
  • 正如Joop提到的,使用
    ps.executeUpdate()用于删除

  • 正如joop也提到的,删除不相关的
    ,但是:永远不要将SQL直接放入JSP。绝对,永远不要把对Swing类的调用放入JSPFurtermore,你不能从客户端做JSP。不相关的,但是:永远不要把SQL直接放入JSP。绝对,永远不要在jspfurtermore中调用Swing类。你不能从客户端做JSP。是的,我正在学习,所以请容忍我糟糕的代码。我想重新设计应用程序,类似于您建议的,使用JSP查看数据,servlet来执行sql操作。也许你可以建议一个好的参考来了解它是如何为新手做的?Thanks@NoobNe0别担心,我们都需要在某个时候学习。我会在答案中添加一些链接。是的,我正在学习,所以请忍受我糟糕的代码。我想按照您的建议重新设计应用程序,使用JSP查看数据,使用servlet执行sql操作。也许你可以建议一个好的参考来了解它是如何为新手做的?Thanks@NoobNe0别担心,我们都需要在某个时候学习。我将在答案中添加一些链接。