最近刚做完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、正常的查询业务表可以不关注大小写,但是,为了少踩点坑,大写是最好的习惯

第十五篇:java操作oracle踩坑之旅的更多相关文章

  1. 微信小程序之mpvue+iview踩坑之旅

    因为之前参照微信的原生的文档写过一些小程序的demo,写的过程比较繁琐,后来出了美团的mpvue,可以直接使用vue开发,其他的不作对比,这篇文章记录一下踩坑之旅. 参照mpvue http://mp ...

  2. 《手把手教你》系列技巧篇(三十五)-java+ selenium自动化测试-单选和多选按钮操作-下篇(详解教程)

    1.简介 今天这一篇宏哥主要是讲解一下,如何使用list容器来遍历多选按钮.大致两部分内容:一部分是宏哥在本地弄的一个小demo,另一部分,宏哥是利用JQueryUI网站里的多选按钮进行实战. 2.d ...

  3. 《手把手教你》系列技巧篇(二十五)-java+ selenium自动化测试-FluentWait(详细教程)

    1.简介 其实今天介绍也讲解的也是一种等待的方法,有些童鞋或者小伙伴们会问宏哥,这也是一种等待方法,为什么不在上一篇文章中竹筒倒豆子一股脑的全部说完,反而又在这里单独写了一篇.那是因为这个比较重要,所 ...

  4. 《手把手教你》系列技巧篇(六十五)-java+ selenium自动化测试 - cookie -下篇(详细教程)

    1.简介 今天这一篇,宏哥主要讲解:利用WebDriver 提供可以读取.添加和删除cookie 信息的相关操作方法.验证浏览器中是否存在某个cookie.原因是:因为基于真实的cookie 的测试是 ...

  5. 《手把手教你》系列技巧篇(四十五)-java+ selenium自动化测试-web页面定位toast-上篇(详解教程)

    1.简介 在使用appium写app自动化的时候介绍toast的相关元素的定位,在Web UI测试过程中,也经常遇到一些toast,那么这个toast我们这边如何进行测试呢?今天宏哥就分两篇介绍一下. ...

  6. 《手把手教你》系列基础篇(八十五)-java+ selenium自动化测试-框架设计基础-TestNG自定义日志-下篇(详解教程)

    1.简介 TestNG为日志记录和报告提供的不同选项.现在,宏哥讲解分享如何开始使用它们.首先,我们将编写一个示例程序,在该程序中我们将使用 ITestListener方法进行日志记录. 2.Test ...

  7. 跟我学SpringCloud | 第十五篇:微服务利剑之APM平台(一)Skywalking

    目录 SpringCloud系列教程 | 第十五篇:微服务利剑之APM平台(一)Skywalking 1. Skywalking概述 2. Skywalking主要功能 3. Skywalking主要 ...

  8. Egret入门学习日记 --- 第十五篇(书中 6.1~6.9节 内容)

    第十五篇(书中 6.1~6.9节 内容) 好的,昨天完成了第五章. 今天来看第六章. 总结重点: 1.如何对组件进行分组? 跟着做: 重点1:如何对组件进行分组? 首先,选中你想要组合的组件. 然后点 ...

  9. java 操作Oracle 批量入库的问题

    java 操作Oracle 批量入库的问题 先说下我运行的环境: Windows7 64位操作系统 (四核)Intel i5-2300 CPU @2.80GHz 内存4G 硬盘1T Jdk1.6+My ...

随机推荐

  1. AES加密php,java,.net三种语言同步实现加密、解密

    话不多数上代码: java::: /* * To change this license header, choose License Headers in Project Properties. * ...

  2. SpringBoot 之 Mybatis 逆向工程

    今天给大家介绍在 spring- boot 项目中如何使用 maven 插件逆向工程生成 Mybatis 代码. pom.xml 添加依赖和插件 <dependency> <grou ...

  3. 拦截器一Interceptor

    import org.springframework.web.servlet.HandlerInterceptor; 前言 拦截器,在AOP(Aspect-Oriented Programming)中 ...

  4. Delphi 日期函数(Day、Mon、Year、Week)使用方法描述

    Day 开头的函数 ● function DateOf(const Avalue: TDateTime): TDateTime; 描述 使用 DateOf 函数用来把一个 TDateTime 类型的变 ...

  5. jQuery方法判断checkbox是否选中以及改变checkbox的选中状态

    jquery判断checked的三种方法: .attr('checked):   //看版本1.6+返回:”checked”或”undefined” ;1.5-返回:true或false .prop( ...

  6. flume注意的事项

    bin/flume-ng agent --conf conf/ --name a3 --conf-file conf/flume-dir.conf & 在使用Spooling Director ...

  7. NX二次开发-UFUN获取当前导出CGM选项设置UF_CGM_ask_session_export_options

    文章转载自唐康林NX二次开发论坛,原文出处: http://www.nxopen.cn/thread-126-1-1.html 刚才有同学问到这个问题,如果是用NXOpen来做,直接录制一下就可以了: ...

  8. JS对象的可枚举属性和不可枚举属性

    昨天在写文章(转载)的时候发现了有些对象的方法是分可枚举性和不可枚举性的.简单的查了一下资料,今天来捋一捋啥是对象的可枚举啥是不可枚举. 可枚举性: 对象的每一个属性都有一个描述对象,用来描述和控制该 ...

  9. Dll注入技术之注册表注入

    DLL注入技术之REG注入 DLL注入技术指的是将一个DLL文件强行加载到EXE文件中,并成为EXE文件中的一部分,这样做的目的在于方便我们通过这个DLL读写EXE文件内存数据,(例如 HOOK EX ...

  10. 城里城外看SSDT

    引子 2006年,中国互联网上的斗争硝烟弥漫.这时的战场上,先前颇为流行的窗口挂钩.API挂钩.进程注入等技术已然成为昨日黄花,大有逐渐淡出之势:取而代之的,则是更狠毒.更为赤裸裸的词汇:驱动.隐藏进 ...