【问题标题】:how to pass multiple values to query using jdbcTemplate in spring如何在spring中使用jdbcTemplate传递多个值进行查询
【发布时间】:2011-08-10 10:59:00
【问题描述】:

在我的 Spring Hibernate 应用程序中,我将所有 sql 查询放在一个 common_queries.xml 文件中,其中一些查询需要 2 到 3 个参数,如下所示

   <query id="mining.fuel" no-of-params="2">
select ms.id id,ms.name value,concat(ms.name,' ','  (',ms.code,')') label,ms.rate rate     from mining_fuel ms where ms.name like '?' and ms.fuel_type_id=?  LIMIT 10
 </query>   

在我的 daoImpl 我得到这个查询

lookupList = jdbcTemplate.queryForList(q1.getQuery());

我会在这里得到查询,但是如何在这里传递'?声明。

【问题讨论】:

    标签: spring jdbctemplate


    【解决方案1】:

    使用this overload,它接受一个 Object vararg 来传递查询参数:

    lookupList = jdbcTemplate.queryForList(q1.getQuery(), value1, value2, value3);
    

    【讨论】:

    • 好吧,我试过我有 2 个值,比如 (q1.getQuery(),lookupValue,filterType);但是当我硬编码 lookupValue 并只传递一个参数 filterType 它工作正常,但是当我这样做时反转其抛出的 java.sql.SQLException:prepareCall() 期间未定义参数,当我传递两个值时,其抛出的 java.sql.SQLException:参数索引超出范围。 2 不在 1 和 1 的有效值之间。我上面提到的 'like' 附近的选择查询有什么问题吗?
    • 尝试删除第一个?周围的引号:like ?
    • 实际上我想使用(如 ' ?% ' ),但如果我删除单引号(如 ?% )它显示的 sql 语法异常..如果我使用引号它的显示参数超出范围异常.
    • 我猜你需要不带引号使用它并且在值后面加上'%':... like ? ...,那么你的值应该是someString + '%'
    【解决方案2】:

    我认为您只需要使用查询使用的参数创建一个 Object 数组,请记住顺序很重要,因为 value1 将是 ?在查询中。

    lookupList = jdbcTemplate.queryForList(q1.getQuery(), new Object[]{value1, value2, value3});
    

    【讨论】:

      【解决方案3】:

      首先在 jdbctemplate 引用上调用 queryForList 方法,并在这个对象类型数组中传递查询和对象类型数组,我们必须只传递对象意味着如果我们有 id 它是 int 类型,我们必须在放入对象数组时转换为对象类型。

      lookupList = jdbcTemplate.queryForList(q1.getQuery, new Object[]{designation, new Integer(id), new Float(sal)}

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-17
        • 2012-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-03
        相关资源
        最近更新 更多