解决getJdbcTemplate往oracle数据库中插入数据返回主键出错问题

解决getJdbcTemplate往oracle数据库中插入数据返回主键出错问题

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

     我们使用Spring中的JdbcDaoSupport往Mysql中插入数据并返回主键代码,我们使用的mysql数据库,主键在数据库中设置为自增长:该类继承自JdbcDaoSupport,所以能直接使用getJdbcTemplate()

	public int saveUser(String userName,int age,String password){
		getJdbcTemplate().update(new PreparedStatementCreator() {
		public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
			String sql = "insert into tb_user (username,age,password) " +
			"values(?,?,?)";
			PreparedStatement ps = connection.prepareStatement(sql,	Statement.RETURN_GENERATED_KEYS);
			ps.setString(1, userName);
			ps.setString(2, age);
			ps.setString(3, password);
			return ps;
		}
	}, keyHolder);
	Integer generatedId = keyHolder.getKey().intValue();
	return generatedId;
	}

当我们数据库换成oracle数据库时,因为oracle数据库採用序列进行ID标识,我们改动对应的sql语句,其它不变:

	String sql = "insert into tb_user (id,username,age,password) values(SEQ_ZB_USER.nextval,?,?,?)";

执行后它会抛出异常:oracle数据库的number类型不能转换为int类型

换成其它类型也不行,这是由于JdbcDaoSupport中的getJdbcTemplate()不正确oracle支持;

解决方法:继承Spring中的SimpleJdbcDaoSupport,JdbcDaoSupport能做的,SimpleJdbcDaoSupport基本也能完毕,所以继承后,使用其getSimpleJdbcTemplate()方法;

	public int saveUser(String userName,int age,String password){
		//设置參数集合,匹配sql语句中的參数
		MapSqlParameterSource params=new MapSqlParameterSource();
		params.addValue("userName", userName);
		params.addValue("age", age);
		params.addValue("password", password);
		
		KeyHolder keyHolder = new GeneratedKeyHolder();
		String sql = "insert into zb_user (id,username,age,password) " +
		"values(SEQ_ZB_JC_PLAN.nextval,:userName,:age,:password)";
		//须要最后一个String集合列表參数,id表示表主键,否则也会出问题
		getSimpleJdbcTemplate().getNamedParameterJdbcOperations().update(sql, params, keyHolder, new String[]{"id"});
		Integer generatedId = keyHolder.getKey().intValue();
		return generatedId;
	}

执行后,成功执行并返回主键;

至于JdbcDaoSupport和SimpleJdbcDaoSupport的差别,大家能够在网上查阅相关文档进行了解!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118715.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • dom4j修改xml文件

    dom4j修改xml文件

    2021年9月13日
    185
  • linux route add 接口,route add命令如何使用「建议收藏」

    linux route add 接口,route add命令如何使用「建议收藏」routeadd命令用于在本地IP路由表中显示和修改条目,使用不带参数的ROUTE可以显示帮助,代码为【route[-f][-p][command[destination][masknetmask]….】。routeadd命令使用情况:一、具体功能该命令用于在本地IP路由表中显示和修改条目。使用不带参数的ROUTE可以显示帮助。二、语法详解route[-f][-p][c…

    2022年8月12日
    2
  • Tensorflow实现各种学习率衰减

    Tensorflow实现各种学习率衰减Tensorflow实现学习率衰减觉得有用的话,欢迎一起讨论相互学习~FollowMe参考文献DeeplearningAIAndrewNgTensorflow1.2API学习率衰减(learningratedecay)加快学习算法的一个办法就是随时间慢慢减少学习率,我们将之称为学习率衰减(learningratedecay)…

    2022年6月3日
    33
  • 捋一捋PDF、PMF、CDF是什么

    捋一捋PDF、PMF、CDF是什么总第230篇/张俊红还记得前段时间看过一篇文章,就是调查大家疫情期间都干了什么,有一条是疫情期间终于弄清楚了PDF和CDF的区别。PDF、PMF、CDF这几个概念确实很容易混淆。今天就来…

    2022年5月23日
    83
  • 10款常用Java测试工具

    10款常用Java测试工具 10款常用Java测试工具1.美国Segue公司的Silk系列产品   Segue公司一直专注于软件质量优化领域。在Segue的产品套件中,拥有业内最强劲且最容易使用的、用于企业应用测试、调优和监测的自动化工具,能够帮助用户保障应用在其生命周期内的可靠性和性能。  (1)SilkPerformer——企业级性能测试工具  企业级自动化测试工具能够支持多种系统,如Java、….

    2022年10月17日
    3
  • JavaScript 常用转义字符

    JavaScript 常用转义字符JavaScript 的转义字符依然是 下面是常用的转义字符 b 代表退格 t 代表一个制表符 即一个 Tab 空格 n 换行回车 v 垂直的制表符 r 回车 双引号 单引号 反斜线 即 OOO 使用八进制表示的拉丁字母 OOO 表示一个 3 位的八进制整数 范围是 000 377 xHH 使用十六进制数表示的拉丁字母 HH 表示一

    2025年8月25日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号