2017-05-23 43 views
-4

自分のサーブレットでデータベースからレコードを削除する際に問題が発生しました。私のサーブレットコードを見て、私を修正してください。サーブレットを使用してデータベースから行を削除

ViewBookServlet.javaサーブレットは、レコードをすべての行の「削除」ハイパーリンクとともにデータベースに表示します。しかし問題は、私がdeleteボタンを押すたびにです.. elseifループが実行され、DeleteBooksServlet.javaサーブレットから削除されたことが示されますが、データはデータベースから削除されません。どのように私はdatabseからレコードを削除できますかまたはbook_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

ようこそ!より多くの質問をする前に、[どうすれば良い質問をしますか?](http://stackoverflow.com/help/how-to-ask)をお読みください。 –

+2

ようこそスタックオーバーフロー! [なぜ誰かが私を助けることができますか?実際の質問ではないのはなぜですか?](https://meta.stackoverflow.com/questions/284236/why-is-can-someone-help-me-not-an-actual質問)より多くの質問をしようとする前に。 –

+1

デバッガを使用します。あなたが 'id'変数で得たものを見てください。サーブレットにパラメータを渡していないので、何も得られないと思う。 – RealSkeptic

答えて

1

それが原因で次の行で、おそらくです:

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

ViewBooksServletのコードから、それはidのように見えていますintString。私はidで削除する代わりにsetStringsetInt方法を使用することになり、例えば:スタックオーバーフローに

PreparedStatement ps=con.prepareStatement("delete from books where id=?"); 
ps.setInt(1, Integer.parseInt(id)); 
関連する問題