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 选项。
我正在使用 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 选项。