MYSQL Delete语句不适用于Java Servlet
我有一个网页,允许用户输入一个单词,当这个单词被提交时,它将从mysql数据库中删除。然而,问题是没有执行该语句 我的表格: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"
<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
PreparedStatement
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();