Java 将对象[]传递给sql查询
在我的应用程序中,我有一个类别ID列表。现在我想根据产品类别从数据库中获取产品,这些产品类别将包含在该列表中,还包括产品名称,如“XYZ”。如何通过使用In子句来实现这一点。 有人知道我路过这里,但我得到了一张空名单吗 我的代码是: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
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,',')代码>我发现这更具可读性。我希望它有用。