最近刚做完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. 关于synchronized和Lock

    原文链接:关于volatile关键字解析,synchronized和Lock参考 深入浅出,解释的非常清楚,有条理~~~ 以下为转载内容: Java并发编程:volatile关键字解析 volatil ...

  2. 泛型(Generic)方法(函数,算法)

    例子: static void Main(string[] args) { int[] a1 = { 1, 2, 3, 4, 5 }; int[] a2 = { 1, 2, 3, 4, 5 }; do ...

  3. 【NOI2019模拟2019.6.27】B (生成函数+整数划分dp|多项式exp)

    Description: \(1<=n,k<=1e5,mod~1e9+7\) 题解: 考虑最经典的排列dp,每次插入第\(i\)大的数,那么可以增加的逆序对个数是\(0-i-1\). 不难 ...

  4. Yii2配置

    最外层:配置文件,params Yii2导航 <?php NavBar::begin([ 'brandLabel' => '大海', 'brandUrl' => Yii::$app- ...

  5. NX二次开发-NXString转换为char*方法

    NX9+VS2012 #include <uf.h> #include <uf_drf.h> #include <NXOpen/Annotations_Note.hxx& ...

  6. kma 2019CSP前刷题记录

    2019/10/25 \([LNOI2014]\ LCA\) \([Luogu\ P2774]\) 方格取数问题 \(Gauss\)消元板 \([JSOI2008]\)球形空间产生器 2019/10/ ...

  7. spring boot读取自定义配置文件时乱码解决办法

    @PropertySource(value = "classpath:book.yml", ignoreResourceNotFound = true,encoding = &qu ...

  8. 极限学习机(Extreme Learning Machine)学习笔记

    最近研究上了这个一个东西--极限学习机. 在很多问题中,我大多会碰到两个问题,一个是分类,另一个就是回归.简单来说,分类是给一串数打个标签,回归是把一串数变为一个数. 在这里我们需要处理的数据一般维度 ...

  9. NEO4J亿级数据全文索引构建优化

    NEO4J亿级数据全文索引构建优化 一.数据量规模(亿级) 二.构建索引的方式 三.构建索引发生的异常 四.全文索引代码优化 1.Java.lang.OutOfMemoryError 2.访问数据库时 ...

  10. netty UnpooledHeapByteBuf 源码分析

    UnpooledHeapByteBuf 是基于堆内存进行内存分配的字节缓冲区,没有基于对象池技术实现,这意味着每次I/O的读写都会创建一个新的UnpooledHeapByteBuf,频繁进行大块内存的 ...