Java 将对象[]传递给sql查询

Java 将对象[]传递给sql查询,java,sql,hibernate,Java,Sql,Hibernate,在我的应用程序中,我有一个类别ID列表。现在我想根据产品类别从数据库中获取产品,这些产品类别将包含在该列表中,还包括产品名称,如“XYZ”。如何通过使用In子句来实现这一点。 有人知道我路过这里,但我得到了一张空名单吗 我的代码是: Object[] cids=final_cats.toArray(); String cds=final_cats.toString(); String query="select fpd from FTextProductDetails ftpd inner jo

在我的应用程序中,我有一个类别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);
Object[]cids=final_cats.toArray();
字符串cds=final_cats.toString();
String query=“从FTextProductDetails ftpd内部连接ftpd.fpProductDetails fpd中选择fpd,其中fpd.categoryId在(“+cds+”)中,ftpd.productName是否类似?”;
对象[]值=新对象[]{“%”+productName+'%};
List List=HibernatePaginationImpl.findProductsByName(查询、值、pageSizeLimit、pageNumber、this.baseDao);

这里有所有类别的最终猫。

让我们把最终猫作为一个列表

 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 ?" ;
int locSize=final_cats.size();
StringBuilder=新的StringBuilder();
Object[]args=新对象[locSize];
对于(int i=0;i

希望这个逻辑能帮助我解决问题

代码如下:

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);
Object[]cids=final_cats.toArray();
字符串cds=“”;
用于(对象o:cids){
cds=cds+o+“,”;
}
cds=cds.substring(0,cds.length()-1);
String query=“从FTextProductDetails ftpd内部连接ftpd.fpProductDetails fpd中选择fpd,其中fpd.categoryId在(“+cds+”)中,ftpd.productName是否类似?”;
对象[]值=新对象[]{“%”+productName+'%};
List List=HibernatePaginationImpl.findProductsByName(查询、值、pageSizeLimit、pageNumber、this.baseDao);

因为您似乎正在使用Hibernate,所以可以使用Hibernate条件查询()并使用限制。在
()中,谢谢David先生。这里我编写了自定义类HibernatePaginationImpl,它将具有接受查询的静态方法。因此我需要传递查询并限制使用条件。好的,如果您需要能够构建
PreparedStatement
的SQL,那么您确实需要在SQL中有大量的
标记。既然CuE已经给了你一个使用这种技巧的答案,我就不麻烦了。我希望你能成功。祝你好运。我已经将你在标题中添加[Colsed]的编辑回滚为1)这是Closed的拼写错误,2)这不是你在堆栈溢出中解决问题的方式:而是在超时后接受你自己的答案(或另一个答案)。你是否意识到
if(cds==null&&cds.isEmpty())
永远不会是真的?事实上,如果您没有使用ApacheCommons,那么前十行可以写成一行-
stringcds=StringUtils.join(final_cats,',')我发现这更具可读性。我希望它有用。