4
是否可以使用Google Cloud Spanner Java SDK绑定到提供给查询IN部分的参数?如何绑定到云端Spanner Java API中的IN参数
例如
List<String> names = new ArrayList<String>();
names.add("Alice");
names.add("Bob");
String sql = "SELECT * FROM people WHERE name IN (@names)";
Statement statement = Statement
.newBuilder(sql)
.bind("names").to(names)
.build();
如果我们使用toStringArray绑定名称,则会出错。如果我们设置如下:
names = "'Alice','Bob'";
然后生成的SQL是:
SELECT * FROM people WHERE name IN ("'Alice','Bob'")
- 注意额外的报价。任何想法如何我们可以做到这一点没有%的字符串替换,以避免注入攻击?
当你说“是错误的”,什么是错误?你在做'.bind(“names”)。toStringArray(names)' –
嗨Dan,我收到这个错误: INVALID_ARGUMENT:没有运算符IN的匹配签名,用于参数类型STRING和{ARRAY} [at 1:35] SELECT name FROM customers WHERE name IN(@names) –
user3707
如果你的SQL语句为'WHERE name IN UNNEST(@names)' –