拾慧 2019-09-22 15:59 采纳率: 0%
浏览 253

练习Spring事务管理,使用jdbc模板的时候,传参提示索引超出

今天照着黑马视频练习Spring事务,使用jdbc模板的时候,传参时会报错,希望能告知,拜托

public class AccountDaoIpml extends JdbcDaoSupport implements AccountDao {
    @Override
    public int outMoney(String outAccount,Double money) {
        // TODO Auto-generated method stub
        return this.getJdbcTemplate().update("update T_AccountTransfer set FMoney=FMoney-? where FAccount=?",money,outAccount);
    }
    @Override
    public int inMoney(String inAccount,Double money) {
        return this.getJdbcTemplate().update("update T_AccountTransfer set FMoney=FMoney+? where FAccount=?",money,inAccount);
    }
}

报错信息

org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [update T_AccountTransfer set FMoney=FMoney-? where FAccount=?]; 
索引 1 超出范围。; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 索引 1 超出范围。

如果改为直接执行sql,没有传参就测试通过,这能判断是我传参方式有问题

        return this.getJdbcTemplate().update("update T_AccountTransfer set FMoney=FMoney-1000 where FAccount='account1'");

还达不到看源码能力,不能发现这个变量传参有什么问题

    @Override
    public int update(String sql, Object... args) throws DataAccessException {
        return update(sql, newArgPreparedStatementSetter(args));
    }

而且和老师的代码一样,为什么他就没错呢

图片说明

代码:
1、Dao

public class AccountDaoIpml extends JdbcDaoSupport implements AccountDao {
    @Override
    public int outMoney(String outAccount,Double money) {
        // TODO Auto-generated method stub
        return this.getJdbcTemplate().update("update T_AccountTransfer set FMoney=FMoney-? where FAccount=?",money,outAccount);
    }
    @Override
    public int inMoney(String inAccount,Double money) {
        return this.getJdbcTemplate().update("update T_AccountTransfer set FMoney=FMoney+? where FAccount=?",money,inAccount);
    }
}

2、Service

public class AccountServiceIpml implements AccountService{

    private AccountDao accountDao;
    public void setAccountDao(AccountDao accountDao) {
        this.accountDao = accountDao;
    }

    @Override
    public void accountTransfer(String outAccount, String inAccount, double money) {
        // TODO Auto-generated method stub
        accountDao.outMoney(outAccount, money);
        accountDao.inMoney(inAccount, money);
    }
}

3、test

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class TranTest1 {
    @Resource(name="accountService")
    public AccountService accountService;

    @Test
    public void demo1() {
        accountService.accountTransfer("account1","account2",1000d);
//      ApplicationContext applictionContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    }
}

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2019-09-22 16:50
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题