如何使用 jsp 从数据库中删除选定的数据?
How to delete selected data from database using jsp?
jdbcData.jsp
这显示整行的结果
table reg
的列和操作 link
删除。我只想删除那个
单击删除时显示的数据行
link。我该怎么办?
注意: 第二个小脚本被命名为 jdbcDelete.jsp.
jdbcData.jsp
<%
Statement st =null;
ResultSet rs =null;
String s1 = request.getParameter("fn");
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/innoventa","root","root");
st =con.createStatement();
rs=st.executeQuery("select * from reg");
%>
<table border="1" align="center" cellpadding="10dx" summary="all posts" >
<tr>
<td><b>Id</b></td>
<td><b>First Name</b></td>
<td><b>Last Name</b></td>
<td><b>Action</b></td>
</tr>
<%
while(rs.next()) {
int a = rs.getInt("id");
String b =rs.getString("fname");
String c=rs.getString("lname");
%>
<tr>
<td><%out.println(a);%></td>
<td><%out.println(b);%></td>
<td><%out.println(c);%></td>
<td><a href="jdbcDelete.jsp?id1=<%=a%>">Delete</a></td>
</tr>
<%
}
%>
</table>
<%
st.close();
con.close();
%>
jdbcDelete.jsp
<% Integer dlt =(Integer)request.getAttribute("id1");
ResultSet rs=null;
Statement st=null;
rs = st.executeQuery("delete from reg where id='"+dlt+"'");
response.sendRedirect("jdbcData.jsp");
%>
您可以像这样重写代码,
<% Integer dlt =(Integer)request.getAttribute("id1");
ResultSet rs=null;
Statement st=null;
PreparedStatement ps=con.prepareStatement("delete from reg where id=?")
ps.setInt(1,dlt);
ps.executeUpdate();
response.sendRedirect("jdbcData.jsp");
%>
注意:-对于数据库操作,您可以编写服务或 DAO
请通过 MVC 架构
您的代码无法正常工作的原因有很多。
在jdbcDelete.jsp中没有连接对象,所以你需要先建立连接
<%
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/innoventa","root","root");
Statement st = con.createStatement();
%>
您正在使用 request.getAttribute("id1");
获取 ID
,并且您没有在页面 jdbcData.jsp
中设置任何属性,因此您将获取 null
。您需要使用 request.getParameter("id1");
,request.getParameter("id1");
总是 returns String
,因此您需要将 String
解析为 int
。为此
int dlt = Integer.parseInt(request.getParameter("id1"));
您正在执行 executeQuery
其中 returns ResultSet
.
Executes the given SQL statement, which returns a single ResultSet
object.
这里你需要使用executeUpdate
,它用来执行DML
命令,比如INSERT, UPDATE AND DELETE
和returnsint
。
int i = st.executeUpdate("delete from student where studentid="+dlt);
最后你 jdbcDelete.jsp 看起来像:
<%@ page import="java.sql.*" %>
<%
int dlt = Integer.parseInt(request.getParameter("id1"));
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/innoventa","root","root");
Statement st = con.createStatement();;
int i = st.executeUpdate("delete from student where studentid="+dlt);
if (i != 0) {
response.sendRedirect("jdbcData.jsp");
} else {
out.print("Data not deleted successfully");
}
%>
建议:在JSP中使用java代码是不好的做法而不是使用servlets
,也使用preparedstatement
但随着时间的推移,你会学到东西。
希望这会有所帮助。
jdbcData.jsp
这显示整行的结果
table reg
的列和操作 link
删除。我只想删除那个
单击删除时显示的数据行
link。我该怎么办?
注意: 第二个小脚本被命名为 jdbcDelete.jsp.
jdbcData.jsp
<%
Statement st =null;
ResultSet rs =null;
String s1 = request.getParameter("fn");
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/innoventa","root","root");
st =con.createStatement();
rs=st.executeQuery("select * from reg");
%>
<table border="1" align="center" cellpadding="10dx" summary="all posts" >
<tr>
<td><b>Id</b></td>
<td><b>First Name</b></td>
<td><b>Last Name</b></td>
<td><b>Action</b></td>
</tr>
<%
while(rs.next()) {
int a = rs.getInt("id");
String b =rs.getString("fname");
String c=rs.getString("lname");
%>
<tr>
<td><%out.println(a);%></td>
<td><%out.println(b);%></td>
<td><%out.println(c);%></td>
<td><a href="jdbcDelete.jsp?id1=<%=a%>">Delete</a></td>
</tr>
<%
}
%>
</table>
<%
st.close();
con.close();
%>
jdbcDelete.jsp
<% Integer dlt =(Integer)request.getAttribute("id1");
ResultSet rs=null;
Statement st=null;
rs = st.executeQuery("delete from reg where id='"+dlt+"'");
response.sendRedirect("jdbcData.jsp");
%>
您可以像这样重写代码,
<% Integer dlt =(Integer)request.getAttribute("id1");
ResultSet rs=null;
Statement st=null;
PreparedStatement ps=con.prepareStatement("delete from reg where id=?")
ps.setInt(1,dlt);
ps.executeUpdate();
response.sendRedirect("jdbcData.jsp");
%>
注意:-对于数据库操作,您可以编写服务或 DAO 请通过 MVC 架构
您的代码无法正常工作的原因有很多。
在jdbcDelete.jsp中没有连接对象,所以你需要先建立连接
<% Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/innoventa","root","root"); Statement st = con.createStatement(); %>
您正在使用
request.getAttribute("id1");
获取ID
,并且您没有在页面jdbcData.jsp
中设置任何属性,因此您将获取null
。您需要使用request.getParameter("id1");
,request.getParameter("id1");
总是 returnsString
,因此您需要将String
解析为int
。为此int dlt = Integer.parseInt(request.getParameter("id1"));
您正在执行
executeQuery
其中 returnsResultSet
.
Executes the given SQL statement, which returns a single ResultSet object.
这里你需要使用executeUpdate
,它用来执行DML
命令,比如INSERT, UPDATE AND DELETE
和returnsint
。
int i = st.executeUpdate("delete from student where studentid="+dlt);
最后你 jdbcDelete.jsp 看起来像:
<%@ page import="java.sql.*" %>
<%
int dlt = Integer.parseInt(request.getParameter("id1"));
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/innoventa","root","root");
Statement st = con.createStatement();;
int i = st.executeUpdate("delete from student where studentid="+dlt);
if (i != 0) {
response.sendRedirect("jdbcData.jsp");
} else {
out.print("Data not deleted successfully");
}
%>
建议:在JSP中使用java代码是不好的做法而不是使用servlets
,也使用preparedstatement
但随着时间的推移,你会学到东西。
希望这会有所帮助。