springboot jdbctemplate 字符串连接失败,错误 "Missing IN or OUT parameter at index:: 2"

springboot jdbctemplate string concat failing with error "Missing IN or OUT parameter at index:: 2"

我正在使用 Stringbuilder 连接 select 语句的非空字段。但是它的代码失败了 "SQL state [99999]; error code [17041]; Missing IN or OUT parameter at index:: 2; nested exception is java.sql.SQLException: Missing IN or OUT parameter at index:: 2"

我尝试打印使用过的列,它们打印正常。请检查并让我知道我在哪里犯了错误。

 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[]" 的选项。

springboot 中的 JpaRepository 选项,解决了我的问题,我能够根据我的要求创建自定义 findby 选项。