Я использую 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Объект [] "в моем разделе запроса.