DB杂记

1. mybatits 批量插入:

    <insert id="insertColumnitem2">

               INSERT INTO REPORT_COLUMNITEM (COLUMN_LABEL,COLUMN_FIELD,COLUMN_INDEX,REPORT_ID,COMMENTS)

            <foreach collection="list" item="item" index="index" separator="union all">

                     select #{item.columnLabel,jdbcType=VARCHAR},#{item.columnField,jdbcType=VARCHAR},#{item.columnIndex,jdbcType=NUMERIC},

                              #{item.reportID,jdbcType=NUMERIC},#{item.comments,jdbcType=VARCHAR} from dual 

            </foreach>

     </insert> 

2. mybitis 模糊查询:like ‘%#{name}%‘ 

3. 数据库中表比较大,查询比较慢时,可以考虑缓存。缓存包括缓存到内存和硬盘(文件)。 

4. clob类型字段数据处理:如果数据库无值,先插入空值(EMPTY_CLOB())。然后再查询出来赋值,查询的时候需要注意,要锁定该条记录(select *** for update)。

    然后将clob转换为具体的数据库clob类型,进行赋值。

5. ORACL 异常:can bind a LONG value only for insert into a LONG column:

    原因大概如下:

    1).插入到字符串长度大于4000字节。

    2).插入到表中的记录的某个字段数据的实际长度大于2000个字节(如果是UTF-8,则是1333个字节);或者是插入的记录中有两个或两个以上长度大于2000字节的字符串。

    3).数据库与客户端的JDBC驱动不匹配。

6.报错误:仅能绑定要插入 LONG 列的 LONG 值。错误的原因:检查插入的值是否大于该字段数据类型约束的长度。

 

7. union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。

8. union 和 union all都可以将多个结果集合并,而不仅仅是两个,你可以将多个结果集串起来。使用union和union all必须保证各个select 集合的结果有相同个数的列,并且每个列

    的类型是一样的。但列名则不一定需要相同,oracle会将第一个结果的列名作为结果集的列名。

9. 当使用union 或 union all时,我们没有必要在每一个select结果集中使用order by子句来进行排序,我们可以在最后使用一条 order by来对整个结果进行排序。

10. mybatits中因为语句中有一个小于号“<”,在XML中,会被当成一个页面元素来解析,不会处理为SQL语句的组成部分,需要将这部分语句放到<![CDATA[]]中。修改如下:

      <![CDATA[

                  and timestampdiff(second, create_time, now()) <= 2592000

       ]]>

       这样,将会把SQL语句中与XML页面元素相同的元素屏蔽,是的XML不将其解析为XML的元素,从而生成正确的SQL语句。

11. mybatis中打印SQL语句的日志级别为DEBUG,若想打印SQL语句,可以将日志级别设置为DEBUG即可。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。