gpt4 book ai didi

java - 在 JSP 中删除不起作用(表不存在)

转载 作者:行者123 更新时间:2023-11-29 14:10:33 24 4
gpt4 key购买 nike

我有一个简单的 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>

每条记录都有一个“删除”按钮,在该按钮下方应允许删除相应的记录。

但是,当调用 deleteUser 方法时,准备好的语句失败,我在控制台中收到以下消息:表“users”不存在。

这是为什么呢?这是因为我调用 deleteUser 方法并打开另一个到数据库的连接,而另一个到同一个数据库的连接已经打开(因此找不到表)?

我该如何解决这个问题?

我还想在删除完成后返回到我的简单 Web 应用程序主菜单 (index.html)。你能帮我解决这个问题吗?

非常感谢!

最佳答案

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

  1. deleteUser 中的连接字符串与 JSP 的主要部分不同。这就是为什么 Users找不到表。
  2. Java代码在服务器上执行;在浏览器收到页面之前。因此,您不能在 onClick 上调用 Java 代码。如你所愿。在您的代码中,您实际上会在显示记录后立即将其删除。
  3. 如其他人所述JOptionPane.showInputDialog("Player Deleted");将不起作用,因为它是对桌面 GUI 中使用的 Swing 对象的调用。
  4. 不要将 SQL 放入您的 JSP(或 Java 脚本)中。 (请注意,我了解您目前正在学习,需要逐步进步,所以这是可以接受的)。
  5. 如 Joop 所述,使用 ps.executeUpdate();供您删除。
  6. 正如 joop 所提到的,删除 <!--在代码的顶部
  7. 同时删除 <input>在你的<head>部分。它与那里无关。

最接近您的代码的解决方案是检查是否有 id请求中的参数并删除相应的记录(如果存在)。 onClick只会重定向到正确设置了 id 参数的同一页面。

更好的方法是将所有数据库代码放在一个 servlet 中,然后进行 AJAX 调用以删除记录,甚至获取数据。您可以找到有关 simple ajax calls 的教程或 about displaying records with ajax calls .还有一个nice answer on SO .注意他们都使用 JQuery进行 Ajax 调用。

当您对此感到满意时,您可以更进一步并使用 JAX-RS而不是简单的 serlvet。

关于java - 在 JSP 中删除不起作用(表不存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37281291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com