0
点赞
收藏
分享

微信扫一扫

201116:使用duceap的jdbc删除操作抛异常-删除一次只能删一个-Oracle中对于varchar2类型

编程练习生J 2021-09-28 阅读 21
每日复盘

一. 使用duceap的jdbc删除操作抛异常

异常信息

org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction

说明操作的对象时应用了乐观锁机制,或定义pojo时定义了version字段.

错误原因:

当在进行操作时,当前version版本与数据库中version版本不一致;

​ 1:两个以上的session同时对此记录进行了相似操作;
​ 2:数据提交问题:
​ 例如通过编辑页面来修改一条记录时:提交上来的form值对象中version为空或者大于数据库中对应该记录的version字段值,当update时,version不一致就会出错;
解决:

1.用form提交数据时,把version也一并提交上来;

2.从数据库中把version查出来,赋给实体对象;再更新;

解决:把service层的jdbc操作改成dao层的jpa来删除就解决了

二. 删除一次只能删一个

异常信息

ORA-00933: SQL command not properly ended

当抛出此错误提示信息,代表着SQL语句本身就是有问题的!(ORA-00933:SQL命令没有正确的结束)比如:

1:可能SQL语句中关键字前后缺少空格

2:Oracle 给表起别名时,直接在表名的后面空格别名就可以,不需要AS

3:SQL 语句中缺少关键字或者多了某个关键字,比如:AND

4:SQL 语句中缺少关键字或者多了某个标点符号,比如:,

5:数据库不同的版本或不同的数据库支持的SQL的语法规则是不一样的,一句SQL语句在一个数据中是正确的在另一个数据库中未必也正确

解决:和问题1一样改成jpa中dao层删除

三. Oracle中对于varchar2类型

Oracle中对于varchar2类型,如果是UTF-8编码,一个中文占用3个字符长度,如果是GBK编码,一个中文占用2个字符长度

举报

相关推荐

0 条评论