jdbcData.jsp
这显示了整行的结果
以及带有操作链接的表reg
的列
删除。我只想删除它
单击删除时数据行打开
链接。我该怎么办?
注意:第二个scriptlet命名为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");
%>
答案 0 :(得分:2)
您的代码无法正常运行的原因有多种。
在 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");
始终返回String
,因此您需要将String
解析为int
。要做到这一点
int dlt = Integer.parseInt(request.getParameter("id1"));
您正在执行executeQuery
,并返回ResultSet
。
执行给定的SQL语句,该语句返回单个ResultSet 对象
在这里,您需要使用executeUpdate
来执行DML
之类的INSERT, UPDATE AND DELETE
命令,并返回int
。
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
是不好的做法,但是随着时间的推移你会学习。
希望这会有所帮助。
答案 1 :(得分:0)
您可以像这样重写代码,
<% 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架构