• 第十五篇:java操作oracle踩坑之旅


    最近刚做完mysql的各种需求,项目要满足oracle数据库,于是走上了漫漫的踩坑之路,同行可以看看以免踩坑……
    第一条:
    oracle建表的时候不需要在建表sql语句后指定默认字符集 DEFAULT CHARSET=utf8 ,为什么呢?
    因为oracle没有表级别的字符集,在建库的时候就已经定好了
    第二条 :
    oracle建表的时候自增主键不能用 AUTO_INCREMENT,为什么呢?
    因为这个是mysql的用法,其他数据库自增主键用法也不同,oracle在所有里面自增字段最麻烦,需要额外的执行命令让你的字段自增
    第三条:
    用java程序执行建表的时候,sql以英文分号结束,提示 建表失败!失败原因:ORA-00911: 无效字符 ,为什么?
    查资料显示 preparedStatement里边的SQL语句不需要";"标志结束。但是如果你单独把sql粘出来放在命令窗口运行,那是没问题的
    这个问题已经验证
    第四条:
    今天2月22日,我被项目里面做数据集的oracle支持搞的头大,很大,数据集其实就是一些注册的表的各种信息存进另一些本地表中,逻辑稍微多一些,当这些保存完之后,重新做查询,问题就来了,一直查不出数据///////////////////////////////////逻辑检查了一遍又一遍,一遍遍调试,都是失败结果,其中一些譬如这样的,为了简便我查询所有的
    select * from user_tab_comments where table_name = 'b',这一句查询表b的一些数据库属性信息,譬如表名,字符编码,声明等等
    同样的
    select * from user_tab_columns where table_name = 'b',这句查这张表的列属性信息,譬如多少列,列名,列类型等等
    坑出现了
    需求上表名是自己手动输入的作为建表的表名,比如我输入的b,建表逻辑执行完之后,执行这两个sql(实际sql复杂些),结果集永远为空,调试,把sql打印出来贴到数据库客户端执行,报错,猜想,表名大小写,因为之前记得oracle的表名都会自动大写,将b改为B,查询成功,这个坑发现的不难,接下来第二个坑,因为手动输入表名一般英文字母不会大写,建表语句create table b……这句在oracle执行后,表名将会是B,select * from b,也是能查出数据的,但是,oracle的一些系统表,比如上面的user_tab_comments ,user_tab_columns,在记录一些表的信息时,记录表名都是大写,而上面两句的table_name的值是查询的另一张表的某个字段值,这个字段值在前面保存时,保存的还是原生的手动输入的b,未做处理。
    总的来说要注意这么几点:
    1、oracle的表名(包括列名)在数据库中都是大写
    2、java执行的sql语句表名、列名可以小写,但是执行完了之后再oracle依然是大写
    3、oracle的系统表,比如上一篇提到的几个系统表,保存了业务表(用户建的表)的信息,这些信息保存的表名列名等字段值都是大写,因此查询这些表的时候条件语句的值一定要注意小写转大写(特别是条件语句中表名是变量字符串的,要处理为大写)
    4、正常的查询业务表可以不关注大小写,但是,为了少踩点坑,大写是最好的习惯

  • 相关阅读:
    IE input X 去掉文本框的叉叉和密码输入框的眼睛图标
    vue监听滚动事件 实现某元素吸顶或者固定位置显示
    判断滚动条到底部的JS逻辑
    vue plugin 插件编写以loading为例
    Maven使用yuicompressor-maven-plugin打包压缩css、js文件
    AngularJS 用 Interceptors 来统一处理 HTTP 请求和响应
    jQuery mouseover与mouseenter,mouseout与mouseleave的区别
    angular内ng存在属性是专门用来解决跨域问题的,$sce
    dede上怎么让所有链接在新窗口打开
    dede文章页调用当前栏目链接方法
  • 原文地址:https://www.cnblogs.com/yb38156/p/9821950.html
Copyright © 2020-2023  润新知