我使用Stringbuilder连接select语句的非空字段。但它失败了代码“SQL状态[99999];错误代码[17041];在索引:: 2处缺少IN或OUT参数;嵌套异常是java.sql.SQLException:缺少索引:: 2处的IN或OUT参数”
我试图打印使用过的列,它们打印得很好。请检查并告诉我在哪里犯了错误。
public List<Dbinv> listdbbysearch(String database, String server, String node, String dc , String env, String instancename ) {
StringBuilder sqlstmt = new StringBuilder ("select * from dbinv where ");
StringBuilder tempval = new StringBuilder ("");
if ( database !=null) {
sqlstmt.append ( " database = ?");
tempval.append ("database");
}
if ( server !=null) {
sqlstmt.append ( " and server =?");
tempval.append(", server");
}
if ( node != null) {
sqlstmt.append ( " and node =?");
tempval.append(", node");
}
if ( dc != null) {
sqlstmt.append ( " and dc =?");
tempval.append(", dc");
}
if ( env != null) {
sqlstmt.append ( " and env =?");
tempval.append(", env");
}
if ( instancename != null) {
sqlstmt.append ( " and instancename =?");
tempval.append(", instancename");
}
System.out.println(sqlstmt);
System.out.println(tempval);
String query = "Select * from dbinv where ( database = ? or database=null) AND (server = ?) AND ( node = ?) AND (dc = ?) AND (env = ?) AND (instancename = ?)" ;
List<Dbinv> dbinvs = template.query(sqlstmt.toString(),new Object[]{tempval.toString()},new BeanPropertyRowMapper<>(Dbinv.class));
return dbinvs;
}
}
请注意,当我为测试用例硬编码相同的参数时,它的工作没有任何错误
也可以任何人建议我可以在我的查询部分中使用“new Object []”跳过的选项。
Spring boot中的JpaRepository选项解决了我的问题,我能够根据我的要求创建自定义findby选项。