使用jdbcTemplate却使用具名参数报错

一、问题背景:

        今天用jdbcTemplate写SQL,想试下能不能使用具名参数(即:冒号加参数名),结果报错:Invalid argument value: java.lang.ArrayIndexOutOfBoundsException。

二、原因分析:

        jdbcTemplate没有对具名参数的处理,是无法使用具名参数的。

三、解决办法:

        ①使用NamedParameterJdbcTemplate:NamedParameterJdbcTemplate是对jdbcTemplate的再封装,可以使用具名参数。

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
     <property name="dataSource" ref="dataSource"/>
</bean>
更换为:
<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
     <constructor-arg ref="dataSource"/>
</bean>

        ②自己创建工具方法解析替换具名参数:

/**
 * 解析替换具名参数
 * @param sql 要执行的SQL
 * @param map 参数map
 * @return 替换后的SQL
 * @author nview
 * @date 2021-08-19
 */
public String getSql(String sql, Map<String, String> map) {

        while (sql.indexOf(":") >= 0) {
            int x = sql.indexOf(":");
            int y = sql.substring(x).indexOf(" ");
            int end = sql.length();
            if (y >= 0) {
                end = x + y;
            }
            String key = sql.substring(x + 1, end);
            String value = map.get(key);
            if (null != value && !"null".equals(value)) {
                value = "'" + value + "'";
            }
            sql = sql.substring(0, x) + value + sql.substring(end);
        }
        System.out.println(sql);
        return sql;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一茗道人nview

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值