mysql - 我将字符串数组传递给PreparedStatement..我正在使用mysql、jsp和存储过程

标签 mysql jsp

我正在将字符串数组传递给PreparedStatement。我正在使用 mysql、jsp 和存储过程,但它没有从数据库获取数据:

 String searchbycategory[] = request.getParameterValues("category");

 StringBuilder sb= new StringBuilder();
 String filter = ""; 

 for(int i = 0; i < searchbycategory.length; i++) { 
     sb.append( "'"+searchbycategory[i]+"'," );
 }

 filter = sb.toString();
 filter = filter.substring(0, filter.length()-1);

 PreparedStatement pstmt = con.prepareStatement("{call some(?)}"); 
 pstmt.setString(1, filter);

 ResultSet resultset = pstmt.executeQuery();

最佳答案

如果searchbycategory的长度为1,您的程序应该按预期工作。 问题是您将输入字符串连接成一个。

如果你想防止程序中的SQL注入(inject), 每个searchbycategory 应映射到PrepareStatement 中的一个参数。例如:

    String searchbycategory[] = request.getParameterValues("category");
    StringBuilder sb = new StringBuilder().append("select col_name from table_name where category in (");
    for (int i = 0; i < searchbycategory.length; i++) {
        sb.append("?,");
    }
    sb.setCharAt(sb.length()-1,')');
    PreparedStatement pstmt = con.prepareStatement(sb.toString());
    for (int i = 0; i < searchbycategory.length; i++) {
        pstmt.setString(i+1, searchbycategory[i]);
    }
    ResultSet resultset = pstmt.executeQuery();

关于mysql - 我将字符串数组传递给PreparedStatement..我正在使用mysql、jsp和存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36623061/

相关文章:

java - 如何在struts中将ID传递给action.java?

mysql - 过滤 mysql 数据透视查询而不丢失所选记录的过滤字段

mysql - 有条件地分组记录

PHP 代码未在日期时间中识别 AM 和 PM

java - 使用 JSP 和 JDBC 在网站上注册后将新用户添加到数据库

java - 如何将jsp页面中的多个(数量是动态的)字段绑定(bind)到 Controller ?

mysql - Mysql ASC 如何排序 1,2,3,4,5 而不是 1,10,11,12?

mysql - 如何导出mysql的特定类别

java - 使用 IntelliJ 和 Struts 2 的目录层次结构

javascript - 如何使用 jsp 值在 javascript 中为 get 方法提供操作