2017-05-23 5 views
-4

Ich hatte ein Problem in meinem Servlet in Bezug auf das Löschen von Datensatz aus meiner Datenbank. Bitte schauen Sie über meinen Servlet-Code und korrigieren Sie mich bitte.Löschen Zeile aus der Datenbank mit Servlet

ViewBooksServlet.java Servlet zeigt die Datensätze in der Datenbank zusammen mit einem Hyperlink "Delete" in jeder Zeile an. Aber Problem ist, wann immer ich versuche, auf die Schaltfläche Löschen zu drücken. Die Elsef-Schleife wird ausgeführt und es wird vom DeleteBooksServlet.java-Servlet gelöscht, aber die Daten werden nicht aus der Datenbank gelöscht. Bitte führen Sie mich aus, wie ich den Datensatz aus der Datenbank löschen kann oder aus Buch_Name.

ViewBooksServlet.java

package books; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.ResultSetMetaData; 
import java.sql.SQLException; 
import java.sql.Statement; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

@WebServlet("/viewbook") 
public class ViewBooksServlet extends HttpServlet { 
private static final long serialVersionUID = 1L; 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 
    PrintWriter out=response.getWriter(); 
    Connection con=null; 
    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     con=DriverManager.getConnection("jdbc:mysql://localhost:3306/books_online","root",""); 
     Statement stmt=con.createStatement(); 
     ResultSet rs=stmt.executeQuery("Select * from books"); 
     out.println("<html><table width='50' border='1'>"); 
     out.println("<tr><td>Id</td><td>Name</td><td>Author</td><td>Price</td></tr>"); 

     while(rs.next()) 
     { 
      out.println("<tr><td>"+rs.getInt(1)+"</td><td>"+rs.getString(2)+"</td><td>"+rs.getString(3)+"</td><td>"+rs.getString(4)+"</td><td><a href='deletebook'>Delete</a></td></tr>"); 
     } 
     out.write("</table></html>"); 

    } catch (ClassNotFoundException | SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 
} 

DeleteBooksServlet.java

package books; 

import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 

import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

@WebServlet("/deletebook") 
public class DeleteBooksServlet extends HttpServlet { 
private static final long serialVersionUID = 1L; 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{  
    PrintWriter out=response.getWriter(); 
    Connection con=null; 
    try { 

     String id=request.getParameter("id"); 
     Class.forName("com.mysql.jdbc.Driver"); 
     con=DriverManager.getConnection("jdbc:mysql://localhost:3306/books_online","root","root"); 
     PreparedStatement ps=con.prepareStatement("delete from books where id=?"); 
     ps.setString(1, id); 
     int i=ps.executeUpdate(); 
     if(i!=0) 
     { 
      out.println("Deleting rows"); 
     } 
     else if(i==0) 
     { 
      out.print("deleted"); 
     } 
    } catch (ClassNotFoundException | SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

} 
+1

Willkommen bei Stack-Überlauf! Bitte lesen Sie [Wie stelle ich eine gute Frage?] (Http://stackoverflow.com/help/how-to-ask), bevor Sie weitere Fragen stellen. –

+2

Willkommen bei Stack Overflow! Bitte lesen Sie [Warum ist "Kann mir jemand helfen?" Keine tatsächliche Frage?] (Https://meta.stackoverflow.com/questions/284236/why-is-can-someone-help-me-not-an-istual (Frage) bevor Sie weitere Fragen stellen. –

+1

Verwenden Sie einen Debugger. Sehen Sie, was Sie in der Variable 'id' erhalten. Ich vermute, du bekommst gar nichts, da du den Parameter nicht an das Servlet übergibst. – RealSkeptic

Antwort

1

Es ist wahrscheinlich, weil die folgenden Zeilen:

PreparedStatement ps=con.prepareStatement("delete from books where id=?"); 
ps.setString(1, id); 

aus dem Code of ViewBooksServlet sieht es aus wie id ist ein int und nicht a String. Ich würde setInt Methode anstelle von setString verwendet von ID zu löschen, z.B .:

PreparedStatement ps=con.prepareStatement("delete from books where id=?"); 
ps.setInt(1, Integer.parseInt(id)); 
Verwandte Themen