Java 在jsp中使用空格从数据库中删除数据

Java 在jsp中使用空格从数据库中删除数据,java,mysql,web-services,jsp,jdbc,Java,Mysql,Web Services,Jsp,Jdbc,我无法从数据库(MySql)中删除数据,例如空格: “blablabla”或“blabla”,但不带空格的数据删除:“blablabla” 以下是我如何在JSP中获取值: <a href=deleteData?id=<%= rs.getString(1)></a> } 我认为问题出在-getString函数中,但在oracle网站上提到该函数获取了所有行,我很失望,你在href中重定向,URL中的空格被转换为%20,这就是为什么当你传递“blablabla”时,你


我无法从数据库(MySql)中删除数据,例如空格:
“blablabla”或“blabla”,但不带空格的数据删除:“blablabla”

以下是我如何在JSP中获取值:

<a href=deleteData?id=<%= rs.getString(1)></a>
}
我认为问题出在-getString函数中,但在oracle网站上提到该函数获取了所有行,我很失望,你在href中重定向,URL中的空格被转换为%20,这就是为什么当你传递“blablabla”时,你的删除结果不匹配。你应该净化你的价值观

非常快的方式:

将%20替换为空字符串


正确的方法:

首先,使用
PreparedStatement
;现在,您的代码成为SQL注入的牺牲品。@fge是对的。昨天我为你回答的最后一个问题也提出了同样的建议。请尽快养成使用最佳实践的习惯。推迟他们只会妨碍你提高技能。而使用
PreparedStatement
只需额外增加两行@RaviThapliyal谢谢你,我认为这份准备好的声明并不能解决这个问题,实际上还有一个更大的问题。您正在使用数据本身作为密钥。相反,您应该引入一个数字主键,而不是像下面的答案所建议的那样在空格处乱动。是的,PreparedStatement并不能解决您的空格问题,但它确实让您的程序更安全,便于用户使用。我们这里推荐的不仅仅是一个花哨的方法调用。对不起,我不明白你什么时候说的
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 java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

@WebServlet("/deleteData")
public class deleteData extends HttpServlet {

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

    String value = request.getParameter("id");


    try {
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/evernoteDB",
                "evernoteDB", "0633739768z");


        Statement st = conn.createStatement();

        st.executeUpdate("DELETE FROM note WHERE noteName='" + value  + "'");

        response.sendRedirect("/userNotes.jsp");

        conn.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}