【问题标题】:how to pass a list to sql query in the below mentioned scenerio如何在下面提到的场景中将列表传递给 sql 查询
【发布时间】:2014-09-17 02:47:10
【问题描述】:

我必须将列表传递给用户选择的存储过程。 我在java端作为字符串的那个列表。 示例:String list="123,467,980";

现在,如果我将这个字符串原样用于存储过程,那么它将如何工作。

我不能使用它,如下所述:

select * from table_name where code in (list_var)

那么任何人都可以指导我实现此功能的最佳方法。

【问题讨论】:

标签: java sql sql-server select plsql


【解决方案1】:

在客户端编写 SQL:

String sql = "select * from table_name where code in (" + list_var + ")";

或者,如果您想要调用存储过程,实际参数应该是您的list 字符串中表示的参数:

String [] ids = list.split(",");
String sql = "{call yourProcedure(";
for(int i = 0; i < ids.length; i++)
    sql +=  (i == 0?"":",") + "?";
sql += ")}";
CallableStatement cst = con.prepareCall(sql);
for(int i = 0; i < ids.length; i++)
    cst.setInt(i+1, Integer.parseInt(ids[i]));

或者:

String sql = "{call yourProcedure(" + list + ")}";
CallableStatement cst = con.prepareCall(sql);

【讨论】:

  • 您提供了三个答案。第二个很好。第一个和第三个有 SQL 注入的风险。
  • @DavidWallace 您是对的,尽管 OP 没有指定 list 是否是收集用户提供的原始输入的结果,这可能会导致您提到的两个答案的危险 SQL 注入情况,或者如果它是由他/她的程序间接组成的。后一种情况,无法进行 SQL 注入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-12
相关资源
最近更新 更多