Springboot jdbctemplate строка concat завершается с ошибкой «Отсутствует параметр IN или OUT в index :: 2» - PullRequest
0 голосов
/ 17 марта 2019

Я использую Stringbuilder для объединения ненулевых полей для оператора select.Но происходит сбой с кодом «Состояние SQL [99999]; код ошибки [17041]; Отсутствует параметр IN или OUT в index :: 2; вложенное исключение составляет java.sql.SQLException: Отсутствует параметр IN или OUT в 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Объект [] "в моем разделе запроса.

1 Ответ

0 голосов
/ 22 апреля 2019

Опция JpaRepository в springboot решила мою проблему, я смог создать пользовательскую опцию findby, основываясь на моих требованиях.

...