Spring JDBC与PostgreSQL本机查询(以列表作为参数)不起作用
我使用PostgreSQL作为数据库服务器。并使用SpringJDBC模板获取以下详细信息。 我的spring代码如下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 =
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());