如何绑定到Cloud Paner Java API中的IN参数

如何绑定到Cloud Paner Java API中的IN参数,java,sql,google-cloud-platform,google-cloud-spanner,Java,Sql,Google Cloud Platform,Google Cloud Spanner,是否可以使用Google Cloud Paner Java SDK绑定到查询的IN部分提供的参数 e、 g 那么生成的SQL是: SELECT * FROM people WHERE name IN ("'Alice','Bob'") 注意额外的报价。您知道如何在不进行%s字符串替换的情况下执行此操作以避免注入攻击吗 2对代码的更改: List<String> names = new ArrayList<String>(); names.add("Alice"); n

是否可以使用Google Cloud Paner Java SDK绑定到查询的IN部分提供的参数

e、 g

那么生成的SQL是:

SELECT * FROM people WHERE name IN ("'Alice','Bob'")
  • 注意额外的报价。您知道如何在不进行%s字符串替换的情况下执行此操作以避免注入攻击吗

2对代码的更改:

List<String> names = new ArrayList<String>();
names.add("Alice");
names.add("Bob");
String sql = "SELECT * FROM people WHERE name IN UNNEST(@names)";
Statement statement = Statement
                .newBuilder(sql)
                .bind("names").toStringArray(names)
                .build();

当你说“it错误”时,错误是什么?您正在执行
.bind(“names”).ToStringaray(names)
Hi Dan,我收到了以下错误:参数无效:参数类型字符串中的运算符没有匹配的签名,{ARRAY}[1:35]从客户中选择name IN(@names)WHERE name IN(@names)如果您将SQL语句添加到
WHERE name IN unest(@names)
会发生什么。这是首选的方法吗?不知道,我阅读了Spaner的服务器代码,发现了这一点,我已经ping了Spaner的技术编写器,看看这是否只是需要记录,或者客户端LIB是否应该展开数组以重复参数。
SELECT * FROM people WHERE name IN ("'Alice','Bob'")
List<String> names = new ArrayList<String>();
names.add("Alice");
names.add("Bob");
String sql = "SELECT * FROM people WHERE name IN UNNEST(@names)";
Statement statement = Statement
                .newBuilder(sql)
                .bind("names").toStringArray(names)
                .build();
SELECT * FROM people WHERE name IN UNNEST(["Alice", "Bob"])