oracle 导入数据时主键丢失,Oracle 插入数据 返回主键
场景:解决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的区别,大家可以在网上查阅相关资料进行了解!
oracle 导入数据时主键丢失,Oracle 插入数据 返回主键相关推荐
- maya导出fbx没动画_maya做出的动画,导出FBX,在导入max时部分动画丢失,如何解决?...
maya做出的动画,导出FBX,在导入max时部分动画丢失,如何解决? bailing1254 LV11 2013-04-02 maya做出的动画,导出FBX,在导入max时部分动画丢失,如何解决? ...
- MyBatis 插入数据库返回主键
最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记. 类似下面这段代码一样获取插入后的主键 User user = new User ...
- mybatis 主键自增 insert后返回主键
mybatis 主键自增 insert后返回主键 : <insert id="insertStudentAutoKey" parameterType="Studen ...
- Mybatis批量插入,返回主键ID不成功,巨坑
一.场景说明 批量插入,返回主键ID报错 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibati ...
- oracle批量插入并且返回自增主键_mybatis + (oracle)实现主键自增 + 插入数据并返回主键...
一.实现主键自增 在oracle数据库中,主键并没有办法自动增长,无法使用insert对应的useGeneratedKeys和keyProperty属性自动返回增加的主键. 要实现自增需要修改 ID列 ...
- oracle导入dmp时覆盖,imp导入dmp时产生错误 ORA-14063、ORA-14048
imp导入dmp时产生错误 ORA-14063.ORA-14048,错误信息如下: . . 正在导入表 "APP_ASSEM_SET_DICT"导入了 4 行 IMP-00017: ...
- java实现数据库主键的更新_Java获取数据库自增主键表中插入数据的ID
这段代码是为了解决,JDBC中在给自增表插入数据后获取插入数据自动生成的ID问题.上网找了半天资料,原来在JDK中有提供方法哎. 参考资料点击打开链接感谢诸位高手的指点. 直接上代码吧: /** * ...
- mysql批量插入没有返回主键id
在大批量新增数据的时候往往会采用批量插入来提高效率,但是经常遇到没有返回主键的情况. 一般会有以下几种可能: 1.升级Mybatis版本到3.3.1.官方在这个版本中加入了批量新增返回主键id的功能 ...
- 给echarts添加筛选时间控件时,控件不显示,并设置数据库无数据时echarts模块显示暂无数据
给echarts模块添加时间控件时,控件无效,经检查发现,控件被画布遮盖了,需要用一个form标签包括时间控件,否则时间控件不生效.另外,如果echarts从后台获取到的数据为空,需要提示暂无信息.这 ...
最新文章
- python swapcase用法_Python swapcase函数有什么用
- foreach 语句
- 数据分析系列:绘制散点图(matplotlib)
- 实验:交换机生成树协议STP--功能验证
- GPU和显卡是什么关系?GPU会取代CPU吗?GPU和显卡的区别是什么?
- UDP socket 设置为的非阻塞模式
- Codeforces Round #225 (Div. 1) E. Vowels 容斥 + sosdp
- Java项目问题_Java项目出现的问题01----学习
- REVERSE-PRACTICE-BUUCTF-4
- php error_get_last(),PHP捕获异常register_shutdown_function和error_get_last的使用
- 算法与数据结构1800题 之 栈和队列
- vco为什么低频下起振困难_为什么协作如此困难?
- C++中获得文件大小
- AVL平衡树的插入例程
- C/C++编程(尾积相乘)
- C# winform 魔兽MH全图制作教程(3):魔兽1.20E.1.24B.1.24E全图内存地址 转自breeze...
- LTE学习-OFDM
- 转载 centos 7 安装2080ti驱动
- android开发 问卷调查案例_「Android问卷调查类型页面及逻辑实现」RadioButton、CheckBox、EditView、单选、多选、输入、...
- 人类登月不可或缺 大型机半个世纪发展史