【发布时间】:2022-03-04 08:06:40
【问题描述】:
我想知道如何在 'where' 子句中使用多个参数将对象列表绑定到 sql 中。
Select * from order where order_id = ? and action_code = ?
数据就像
List<Order> orderList = new ArrayList<>();
orderList.add(1,"KP");
orderList.add(2,"DP");
orderList.add(3,"KP");
这是我尝试过的 我有一个订单列表。每个订单都有订单 ID(长)和操作代码(字符串)。现在我需要在 where 子句中以 order id 和 action code 作为参数查询 db。
Select * from order where order_id = ?和 action_code = ?.
我试图在 args 中传递一个对象数组。 [这很有用]。
Object[] args = new Object[ size of orderList ]
int i = 0
for (Order order : orderList)
{
args[i] = new Object[]{order.getOrderId(), order.getActionCode()};
i++;
}
我正在触发如下查询
jdbcTemplate.query(sql, args, rowMapper);
当我运行应用程序时,我得到以下错误。
org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [SELECT * where ORD_I = ? AND ACT_C = ?]; SQL state [99999]; error code [17004]; Invalid column type; nested exception is java.sql.SQLException: Invalid column type
但是,如果我按以下方式传递数据,它会起作用
jdbcTemplate.query(sql, new Object[] {orderList.get(0).getOrderId, orderList.get(0).getActionCode()}, rowMapper);
到目前为止我尝试过的 我提供了如下类型 [ 在 DB 中,order_id 是 number(38),action_code 是 Char(2))
int[] types = new int[] { java.sql.Types.NUMERIC, java.sql.Types.CHAR
};
jdbcTemplate.query(sql, args, types, rowMapper);
我有一个例外说。 [当我用 java.sql.Types.VARCHAR 替换 java.sql.Types.CHAR 时出现同样的错误]
org.springframework.dao.InvalidDataAccessApiUsageException: args and argTypes parameters must match
以下设置有效
int[] types = new int[] { java.sql.Types.NUMERIC, java.sql.Types.CHAR
};
jdbcTemplate.query(sql, new Object[] {orderList.get(0).getOrderId, orderList.get(0).getActionCode()}, types, rowMapper);
我提到了以下问题 How set Array/List in Spring jdbcTemplate as parameter? - 谈论从列表中传递一个参数
how to bind a list of tuples using Spring JDBCTemplate? - 谈论元组。如果我必须使用 tableA.id = tableB.id 和 tableA.id = 查询 2 个表?和tableB.seq_id = ?,那么上面的解决方案不起作用。
我用谷歌搜索了很多,但现在我遇到了障碍。请帮忙。
【问题讨论】:
标签: spring jdbctemplate