2016-11-22 7 views
1

データベースに接続されている削除アルバムDAO、削除アルバムクラス、および削除サーブレットはすべてありますが、依然としてクエリを実行しない、つまり動作しません。私の削除サーブレットはデータベースから削除されません

以下のコードは、削除サーブレット

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     String name = request.getParameter("name"); 

     DeleteAlbum Album = new DeleteAlbum(name) ; 

     AlbumDAO.INSTANCE.delete(Album); 

     request.getRequestDispatcher("home.jsp").forward(request, response); 
    } 

これは削除アルバムクラス

 public class DeleteAlbum { 
      String name ; 

      public DeleteAlbum(String name){ 
       super(); 

       this.name = name; 
      } 
      public String getName() { 
       return name; 
      } 
      public void setName(String name) { 
       this.name = name; 
      } 

     } 

であるためであり、コードのこのセクションは、データベース

public enum DeleteAlbumDAO { 
     INSTANCE; 

     public Connection getConnection() { 
      Connection con = null ; 
      try { 
       Class.forName("org.hsqldb.jdbcDriver"); 
       con = DriverManager.getConnection(
         "jdbc:hsqldb:hsql://localhost/oneDB", "sa", ""); 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      return con ; 
     } 

     public void delete(Album name) {  
      try { 
       Connection con = getConnection() ; 
       Statement stmt = con.createStatement(); 
       stmt.executeUpdate("Delete from ALBUM WHERE name="+name+""); 
       System.out.println("Connection Succesful"); 
       stmt.close(); 
       con.close(); 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
     } 

、これに接続されています元のALBUM DAOのコードです。名前でアルバムを削除しようとしています。私はalbumDAOを追加して、tiがあるかどうかをテストしました接続されているが、まだあなたが実際に準備されたステートメントにalubum名を渡すされません

import model.Album; 
import model.DeleteAlbum; 

public enum AlbumDAO { 
    INSTANCE; 

    public Connection getConnection() { 
     Connection con = null ; 
     try { 
      Class.forName("org.hsqldb.jdbcDriver"); 
      con = DriverManager.getConnection(
        "jdbc:hsqldb:hsql://localhost/oneDB", "sa", ""); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return con ; 
    } 

    public void save(Album album) {  
     try { 
      Connection con = getConnection() ; 
      Statement stmt = con.createStatement(); 

      stmt.executeUpdate("INSERT INTO ALBUM (name, artist , genre)" 
         + "VALUES ('" + album.getName() + "','"+ album.getArtist() + "','"+ album.getGenre() + "')"); 
     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    public void delete(DeleteAlbum name) {  
     try { 
      Connection con = getConnection() ; 
      Statement stmt = con.createStatement(); 
      stmt.executeUpdate("Delete from ALBUM WHERE name="+name+""); 
      stmt.close(); 
      con.close(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

私のデータベースから削除されません – deecobbk

+0

'stmt.executeUpdate(" ALBUM WHERE name = "+ name +" ")から削除します;' name'は 'Album'オブジェクトです。 'DeleteAlbum'を受け入れ、' album.getName() 'を呼び出す必要があります。 –

+0

あなたは実際に準備されたステートメントやパラメータについて学ぶ必要があります。名前の周りに引用符を忘れてしまい、たとえ忘れていないとしても、アルバム名に引用符が含まれているとステートメントは失敗します。 http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html –

答えて

0

が動作していないので、以下に示すように、あなたはdelete方法を変更する必要があります。

public void delete(DeleteAlbum album) {  
     //Use try with resources as shown below which closes conn & stmt objects 
     try(Connection con = getConnection() ; 
      PreparedStatement stmt = con.prepareStatement("Delete from ALBUM WHERE name=?")) { 

      stmt.setString(1, album.getName()); 
      stmt.executeUpdate(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 

使用してください準備されたステートメントsetString()、setInt()など。SQL injectionsを避けるためのメソッド。参照することができますhere

また、接続リークを避けるために、try with resourcesまたはfinallyブロック内のリソースを使用していることを確認してください。

+0

理由が分からない理由をご記入ください。 – developer

+0

あなたのSQLは無効で、パラメータを渡すために文字列連結の使用を促進します。質問に対する私のコメントを読んでください。 –

+0

@JBNizet私はちょうど同じことを提案する質問を編集しています – developer

関連する問題