MYSQL Delete语句不适用于Java Servlet

MYSQL Delete语句不适用于Java Servlet,java,mysql,servlets,jdbc,Java,Mysql,Servlets,Jdbc,我有一个网页,允许用户输入一个单词,当这个单词被提交时,它将从mysql数据库中删除。然而,问题是没有执行该语句 我的表格: <form id="rem1" action="removeGER" method="GET"> <input type="text" name="wordToRemoveGER" placeholder="Entry (GER)"> <input type="submit" id="removeBtnGER"

我有一个网页,允许用户输入一个单词,当这个单词被提交时,它将从mysql数据库中删除。然而,问题是没有执行该语句

我的表格:

<form id="rem1" action="removeGER" method="GET">
        <input type="text" name="wordToRemoveGER" placeholder="Entry (GER)">
        <input type="submit" id="removeBtnGER" value="Remove Entry">
 </form>
我知道正在从表单中正确检索字符串,并且我知道正在执行try块。问题似乎出在mysql语句本身。

使用

    executeUpdate('') 
而不是

    executeQuery('')

您还应确保关闭该语句,并在完成连接后确认存在以下问题:

  • 您正在执行多条语句,可能是您的连接不允许这样做
  • 执行多条语句时,应使用而不是
    语句#executeUpdate
  • 如果需要向查询传递参数,请不要将其直接附加到sql中,这是攻击的原因。改用
    PreparedStatement
  • 为此,请将此参数添加到连接URL中,确保您的连接允许执行多条语句:
    allowmultiquerys=true

    连接URL的外观示例:

    jdbc:mysql://<server>:<port>/<database>?allowMultiQueries=true
    


    既然您使用了一条delete语句,那么您只需要使用
    PreparedStatement\executeUpdate
    而不是
    executeQuery

    每个
    executeQuery()
    -命令只能使用一个查询。您有两个(
    SET
    DELETE
    命令)。您已经成功创建了一个可能的SQL注入!您应该使用准备好的语句。还有一个事实,它们只是将不安全的字符串直接转储到查询中,而不是使用正确的语句parameters@JonK是对的,,特别是因为该语句已经包含SQL注入问题,目前正在尝试在添加安全措施之前使基础工作正常。我刚刚在本地对其进行了测试,以确保参数与
    PreparedStatement\execute
    一起工作,谢谢,我现在正在实现准备好的语句以防止SQL注入我以前尝试过使用executeUpdate而不是executeQuery,但它不起作用,但现在起作用了。@hjalpmig这是因为现在使用的是单个语句。
    jdbc:mysql://<server>:<port>/<database>?allowMultiQueries=true
    
    conn = SimpleDataSource.getConnection();
    String sql = "SET SQL_SAFE_UPDATES = 0; DELETE FROM `word` WHERE `word` = ?";
    PreparedStatement stat = conn.prepareStatement(sql);
    stat.setString(1, wordGER);
    stat.execute();