springboot jdbctemplate string concat失败,错误“在index :: 2处缺少IN或OUT参数”

问题描述 投票:0回答:1

我使用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 spring-data-jpa spring-data stringbuilder jdbctemplate
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.