开发者社区> 问答> 正文

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

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

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

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

展开
收起
爱吃鱼的程序员 2020-06-09 11:09:47 517 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    我爱 拼字符串;

    建议你不要这么做!

    java的用prepareStatement来做。

    select*fromuserswherenamein(?,?,?)

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

    引用来自“web4j”的评论

    我爱 拼字符串;

    建议你不要这么做!

    java的用prepareStatement来做。

    select*fromuserswherenamein(?,?,?)

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

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

    String[]usernameArray=["张","李","王"];//动态产生in表达式示例StringBuildersb=newStringBuilder("usernamein(");for(inti=0;i<usernameArray.length;i++){sb.append('?');if(i<usernameArray.length-1){sb.append(',');}}sb.append(')');Stringsql="select*fromuserswhere"+sb.toString();//下面执行sql,传入预编译参数等。。。



    比较简陋的方法。

    引用来自“web4j”的评论

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

    String[]usernameArray=["张","李","王"];//动态产生in表达式示例StringBuildersb=newStringBuilder("usernamein(");for(inti=0;i<usernameArray.length;i++){sb.append('?');if(i<usernameArray.length-1){sb.append(',');}}sb.append(')');Stringsql="select*fromuserswhere"+sb.toString();//下面执行sql,传入预编译参数等。。。



    比较简陋的方法。

    回复 @web4j:com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:Unknowncolumn'senna1960'in'whereclause'回复 @唏嘘猪肉佬:代码或异常贴出来让人家帮你看。回复 @web4j:第二个问题我卡在这里不知道怎么办了就是对于查询条件如果有一个找不到记录,代码就出错了找不到记录是经常要发生的这拼接的是SQL语句,但没有直接将查询参数拼接进去,避免了SQL注入。第二个问题不知道你怎么做的,不明白。
    2020-06-09 11:10:06
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载