2

我正在使用 spring JDBC 模板的 queryForInt() 方法。它有两个参数:查询字符串和参数化 SQL 的第二个参数。我有 sql 查询,例如: select count(*) from table X where x.x1=? 和 x.x2=? . 我在参数列表中传递两个整数值:

  • args.add(12); args.add(50);

    DB 中 x1 和 x2 的数据类型为 Number。

    这个方法总是抛出 PreparedStatementCallback;SQL [<>>] 的未分类 SQLException;SQL 状态 [99999];错误代码 [17004];无效的列类型

我无法弄清楚出了什么问题。但是,如果我在 SQL 中硬编码参数值并在 queryForInt 的单参数版本方法中使用相同的值;它有效:“从 x.x1=12 和 x.x2=50 的表 X 中选择计数(*)”。这行得通。

知道这里有什么问题吗?我正在使用 spring 3.0.6 版本。

4

1 回答 1

1

据我了解,您的代码如下所示:

List args = new ArrayList();
args.add(12); args.add(50);
jdbcTemplate.queryForInt(sql, args);

queryForInt期望这里的对象数组 ( Object...) 不是列表,并将 args 解释为单个参数。要修复它,代码应该如下所示:

List args = new ArrayList();
args.add(12); args.add(50);
jdbcTemplate.queryForInt(sql, args.toArray());
于 2013-05-23T10:54:50.527 回答