我确实从这个 Question PreparedStatement IN 子句替代方案中阅读了解决方案?. 但在我的例子中,我在 In 子句中有大约 5000 个参数,它会导致 java.sql.SQLException: Prepared or callable statement has more than 2000 parameter marker。
我正在使用类似的 SQL
String sql = "select * from project in " + projectIds.toString()
projectIds
是一个类似于 "(1,2,3,4....)" 的 StringBuilder 但代码安全报告说它可能会导致 sql 注入。所以我必须使用 ? 占位符来避免它。
我试着用
String sql = "select * from project where charindex(','+convert(varchar(max),id)+',', ?)>0";
statement.setString(1,projectIds.toString);//projectIds like ",1,2,3,4,"..
但它最终会出现不正确的语法错误。
有什么解决办法???