将object []传递给sql查询

时间:2014-04-01 10:08:05

标签: java sql hibernate

在我的应用程序中,我有类别ID的列表。现在我想根据产品类别从数据库中获取产品,该产品类别将包含在该列表中,产品名称也可以像“XYZ”一样。如何通过使用IN子句实现此目的。 有没有人有任何想法我通过传递方式尝试这个,但我得到空列表

我的代码是:

Object[] cids=final_cats.toArray();
String cds=final_cats.toString();
String query="select fpd from FTextProductDetails ftpd inner join ftpd.fProductDetails fpd WHERE fpd.categoryId in( "+cds+" )and ftpd.productName like ?" ;
Object[] values=new Object[]{'%'+productName+'%'};
List<Object[]> list=HibernatePaginationImpl.findProductsByName(query, values,pageSizeLimit , pageNumber,this.baseDao);

这里的final_cats包含所有类别。

2 个答案:

答案 0 :(得分:1)

让我们把final_cats作为List

 int locSize = final_cats.size();
 StringBuilder builder = new StringBuilder();
 Object[] args = new Object[locSize];               
 for( int i = 0; i < locSize; i++ ) {
      builder.append(" ?, " );
      args[i]= final_cats.get(i);
 }
....
String queryString = StringUtils.substringBeforeLast(builder.toString(), ",");      
String query="select fpd from FTextProductDetails ftpd inner join ftpd.fProductDetails fpd WHERE fpd.categoryId in("+ builder.toString() +")and ftpd.productName like ?" ;

希望这个逻辑有帮助..

答案 1 :(得分:0)

我解决了我的问题。

以下是代码:

Object[] cids=final_cats.toArray();
String cds="";
for(Object o:cids) {

        cds=cds+o+",";
}

cds=cds.substring(0, cds.length()-1);

String query="select fpd from FTextProductDetails ftpd inner join ftpd.fProductDetails fpd WHERE fpd.categoryId in( "+cds+")and ftpd.productName like ?" ;
Object[] values=new Object[]{'%'+productName+'%'};
List<Object[]> list = HibernatePaginationImpl.findProductsByName(query, values,pageSizeLimit , pageNumber,this.baseDao);