其实数据库读写这块自我感觉一直都不怎么透彻,所以从今天开始记录我在数据库这块遇到的一些问题. 所以我会一直不间断的更新希望能对我以及正在观看的你有帮助.
1.关于在向数据库进行insert操作的时候,会返回一个int 的值,而如果我们根据这个值来判断是否插入成功时会发现这条sql返回的之为-2147482646,这时为什么呢?细心的同学会发现这时int最大值+1.所以大家根据返回值来判断是否插入成功需要注意下.(至于为什么会返回-2147482646请看我的另一篇文章:关于使用mybatis向数据库中插入数据放回值为-2147482646的问题解析)
2.mybatis 报无效字符:
在遇到这个问题是大家可以先去看看自己的sql语句的句尾有没有";" ,如果有把这个分号去掉就ok了.
问题原因:
我们在使用数据库图形化界面工具的时候,一次运行多条语句时需要在每条语句结尾加上";"用于图形化界面解析sql语句.
而我们在使用mybatis对数据库操作时,每次都是一次操作,所以设计和实际上都不需要这个符号.所以当我在mybatis中有";"时就会报上图所示的"无效字符"
3.在对数据进行修改数据时,遇到一个报错信息:
报错信息ORA-01747: user.table.column, table.column 或列说明无效
经过排查原因是:在mybatis的xml文件中写update语句的时候,由于需要修改多个的列值
每个值之间要用","隔开.而我的最后一个值(YYYY)有时候为空.
当有多个值可能被修改而不能确定那个值被修改时只用<if test="XXXX !=null"></if>这么写是不行的.
如果YYYY没有值,sql语句不会出现修改YYYY但是会造成前边zzzz后多了一个",".此时控制台就会报ORA-01747及错误信息.当然mybatis有解决方法.只是我当时赶时间给忘了.就是在所有的set条件外加一个<set></set>标签就完美解决.
如图:
也可以通过<trim suffixOverrides=","></trim>来解决.
4.在使用mybatis向oracle数据库进行存取数据时发生奇怪的现象,在表中的数据有一个字段是date类型.初始化的时候默认生成的时间是有时分秒的,取出来封装的java对象是java.util.Date也没毛病,但是但我想数据库中存入数据的时候数据库中的日期字段只能精确到日而不能精确到时分秒.这就搞得我很是不爽,就查了查资料,在这记录下.
说起这个问题的解决就要先说下oracle数据中的日期对象了.
oracle 处理时间的几种类型:
1.date:日期类,处理年月日,默认不处理时分秒的值(除非在赋值的时候指明时分秒的值).
2. time:时间类,处理时分秒,不处理年月日,
3.Timestamp:处理年月日时分秒
所以.我在mybatis.xml文件中赋值时既没有指明时分秒的值,也没有使用timeStamp类型封装.就造成了数据库中的数据一旦经过我的存取就没有了时分秒.
解决方法:
#{createTime,jdbcType=TIMESTAMP},
<result column="CREATE_TIME" property="createTime" jdbcType="TIMESTAMP"/>
如果向数据库中插入数据时造成时分秒丢失,在插入语句中的jdbcType不要制定为Date,不写也是可以的.最好指定为timeStamp(规范)