当前位置: 首页 > 知识库问答 >
问题:

我的Delete Servlet不从数据库中删除

谭铭
2023-03-14
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();
            }
        }

这是原始相册DAO的代码,我正在尝试按名字删除相册,我添加了albumDAO来测试是否连接了ti,但它仍然不工作

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();
        }
    }
}

共有1个答案

施誉
2023-03-14

您实际上并没有将alubum名称传递给准备好的语句,因此需要更改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();
        }
    }

请使用preparedstament setString()、setInt()等。方法,以避免SQL注入。您可以在此查阅

此外,确保您正在使用try with resources或关闭finally块中的资源,以避免连接泄漏。

 类似资料:
  • 我需要你帮我。我想在RecyclerView中通过SwipeToDelete删除数据库中的数据。 我已经有了一个从RecycleView中删除项目的Swipe类,我可以从该列表中删除项目,但不能从数据库中删除。 我尝试在NoteAdapater(回收器适配器)中调用数据库,并使用removeItem(int-position)方法删除所需的项,如下所示: 这是Main Active代码: 删除数据

  • 我制作了一个JTable,其中填充了数据库中的数据。它从textfields中获取数据并将其添加到表和数据库中。问题是我有一个删除按钮,我让它从表本身删除选定的行(使用defaultTableModel),但它不会从实际的数据库中删除该数据。当我再次运行该程序时,删除的行再次出现在JTable中。 这可能会变得混乱,但希望有人能找出我错过了什么。帮助将会很感激,但不要,我的时间很少,不能完全大修我

  • 我正试图从数据库中删除一行,但得到以下错误

  • 我有一个jsp网页。我需要删除用户名从数据库当我按删除按钮从网页。我尝试了下面的代码,但是我不能删除名称,而是在用户名数据库中插入一个新行和一个空值。 unblockServlet.java: 受保护的void doPost(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{//TODO自动生成的方法

  • 我想从数据库中删除一条特定的记录。

  • 问题内容: 我需要从数据库中删除重复的行。我可以用简单的SQL查询吗?如果没有,请告诉我一些快速算法。 例子: 我需要删除ID为2的行(或3,无论如何,它们是相等的,但不能同时都是)。谢谢你的帮助 问题答案: 正如评论中指出的那样,如果连续出现三遍,则此操作将无效。您可以重复运行此(繁重的)查询,直到停止删除内容为止,或者等待更好的答案…