Spring JDBC与PostgreSQL本机查询(以列表作为参数)不起作用

Spring JDBC与PostgreSQL本机查询(以列表作为参数)不起作用,spring,postgresql,hibernate,spring-jdbc,Spring,Postgresql,Hibernate,Spring Jdbc,我使用PostgreSQL作为数据库服务器。并使用SpringJDBC模板获取以下详细信息。 我的spring代码如下 List<String> clbkTyps = new ArrayList<String>(); clbkTyps.add("ADD"); clbkTyps.add("UPDATE"); clbkTyps.add("DELETE"); String sqlQuery =

我使用PostgreSQL作为数据库服务器。并使用SpringJDBC模板获取以下详细信息。 我的spring代码如下

List<String> clbkTyps = new ArrayList<String>();
clbkTyps.add("ADD");
clbkTyps.add("UPDATE");
clbkTyps.add("DELETE");
    
String sqlQuery = 
        "SELECT * FROM dev.clbk_logs "
        + " WHERE  clbk_Typ IN (?) "
        + " AND (current_date - cre_dte::date)<?";

@SuppressWarnings("unchecked")
List<CallBackLogs> callBacks = 
(List<CallBackLogs>) template.query(
        sqlQuery,
        new Object[]{clbkTyps, 1},
        new CallBackLogsRowMapperEntity());
List clbkTyps=new ArrayList();
clbkTyps.添加(“添加”);
clbkTyps.添加(“更新”);
clbkTyps.添加(“删除”);
字符串sqlQuery=
“从dev.clbk_日志中选择*”
+“其中clbk_类型在(?)

+和(current_date-cre_dte::date)因为您直接使用JDBC,所以您要么需要有与数组中每个项的参数一样多的问号
,并单独列出它们,要么可以使用sql数组

String sqlQuery =  "SELECT * FROM dev.clbk_logs "
        + " WHERE  clbk_Typ = ANY(?) "
        + " AND (current_date - cre_dte::date)<?";

PreparedStatementSetter pss = (PreparedStatement ps) -> {
    Connection con = ps.getConnection();
    Object[] arr = clbkTyps.toArray();
    java.sql.Array sarr = con.createArrayOf("text", arr);
    ps.setArray(1, sarr);
    ps.setInt(2, days);
}

List<CallBackLogs> callBacks = 
(List<FourKitesCallBackLogs>) template.query(
        sqlQuery,
        pss,
        new CallBackLogsRowMapperEntity());
String sqlQuery=“从dev.clbk\u日志中选择*
+“其中clbk_Typ=任何(?)

+“和(当前日期-cre\u dte::date)您已经看过这张了吗?是的,在我的例子中完全不同,我没有列作为数组。总的来说,从n个记录中,我尝试过滤几组记录。我的clbk_类型是字符变量。因为在使用集合时,保存单个字符串而不是数组
JdbcTemplate
不会扩展
。您需要自己准备sql,以包含所需的
标记,并使用单个元素创建一个
对象[]
。或者使用一个名为parameterjdbctemplate的
模板,该模板确实有这种支持。这里有一些答案,请看一看是的,谢谢这对我有用。轻微建议请更改模板查询中存储列表的列表类型。因为我刚才在帖子中修改了类名。它现在正在为我工作。
String sqlQuery =  "SELECT * FROM dev.clbk_logs "
        + " WHERE  clbk_Typ = ANY(?) "
        + " AND (current_date - cre_dte::date)<?";

PreparedStatementSetter pss = (PreparedStatement ps) -> {
    Connection con = ps.getConnection();
    Object[] arr = clbkTyps.toArray();
    java.sql.Array sarr = con.createArrayOf("text", arr);
    ps.setArray(1, sarr);
    ps.setInt(2, days);
}

List<CallBackLogs> callBacks = 
(List<FourKitesCallBackLogs>) template.query(
        sqlQuery,
        pss,
        new CallBackLogsRowMapperEntity());