前台传入一个动态数组作为数据查询的条件

唏嘘猪肉佬 发布于 2016/08/27 16:44
阅读 302
收藏 0

前台传入一个用户名数组  根据这个数组作为查询的条件 返回一个list集合

我想到的方法是数组拼接成一个字符串("李世民,李渊,李小龙")用in吗?  

不过有的查询条件数据库并没有记录匹配!程序会报错没有这个列。这个怎么破?

以下是问题补充:

@唏嘘猪肉佬:不拼接字符串有什么别的替代方法吗? (2016/08/27 16:48)
加载中
0
红薯官方
红薯官方

我爱拼字符串;

建议你不要这么做!

java的用prepareStatement来做。

select * from users where name in (?,?,?)

根据传入的数组长度产生?符号就可以了。

0
唏嘘猪肉佬
唏嘘猪肉佬

引用来自“web4j”的评论

我爱拼字符串;

建议你不要这么做!

java的用prepareStatement来做。

select * from users where name in (?,?,?)

根据传入的数组长度产生?符号就可以了。

想过这个问题  不过数据量实在是大的话   是不是不大好看啊?  成千上万的?

额, 怎么根据传入的数组长度产生?呢  一时间想不到怎么写啊!  呵呵

0
红薯官方
红薯官方

匹配成千上万个用户名称?什么样的需求场景?

String[] usernameArray = ["张","李","王"];
// 动态产生in 表达式示例
StringBuilder sb = new StringBuilder(" username in (");
for(int i=0; i < usernameArray.length; i++) {
  sb.append('?');
  if(i < usernameArray.length - 1) {
    sb.append(', ');
  }
}
sb.append(') ');

String sql = "select * from users where" + sb.toString();
// 下面执行sql,传入预编译参数等。。。



比较简陋的方法。

0
唏嘘猪肉佬
唏嘘猪肉佬

引用来自“web4j”的评论

匹配成千上万个用户名称?什么样的需求场景?

String[] usernameArray = ["张","李","王"];
// 动态产生in 表达式示例
StringBuilder sb = new StringBuilder(" username in (");
for(int i=0; i < usernameArray.length; i++) {
  sb.append('?');
  if(i < usernameArray.length - 1) {
    sb.append(', ');
  }
}
sb.append(') ');

String sql = "select * from users where" + sb.toString();
// 下面执行sql,传入预编译参数等。。。



比较简陋的方法。

这个不是拼接字符串吗 ?  第二个问题怎么解决?有些查询条件并没有记录匹配!  
唏嘘猪肉佬
唏嘘猪肉佬
回复 @web4j : com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown column 'senna1960' in 'where clause'
红薯官方
红薯官方
回复 @唏嘘猪肉佬 : 代码或异常贴出来让人家帮你看。
唏嘘猪肉佬
唏嘘猪肉佬
回复 @web4j : 第二个问题我卡在这里 不知道怎么办了 就是对于查询条件如果有一个找不到记录,代码就出错了 找不到记录是经常要发生的
红薯官方
红薯官方
这拼接的是SQL语句,但没有直接将查询参数拼接进去,避免了SQL注入。 第二个问题不知道你怎么做的,不明白。
返回顶部
顶部