第十五篇: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、正常的查询业务表可以不关注大小写,但是,为了少踩点坑,大写是最好的习惯
第十五篇:java操作oracle踩坑之旅的更多相关文章
- 微信小程序之mpvue+iview踩坑之旅
因为之前参照微信的原生的文档写过一些小程序的demo,写的过程比较繁琐,后来出了美团的mpvue,可以直接使用vue开发,其他的不作对比,这篇文章记录一下踩坑之旅. 参照mpvue http://mp ...
- 《手把手教你》系列技巧篇(三十五)-java+ selenium自动化测试-单选和多选按钮操作-下篇(详解教程)
1.简介 今天这一篇宏哥主要是讲解一下,如何使用list容器来遍历多选按钮.大致两部分内容:一部分是宏哥在本地弄的一个小demo,另一部分,宏哥是利用JQueryUI网站里的多选按钮进行实战. 2.d ...
- 《手把手教你》系列技巧篇(二十五)-java+ selenium自动化测试-FluentWait(详细教程)
1.简介 其实今天介绍也讲解的也是一种等待的方法,有些童鞋或者小伙伴们会问宏哥,这也是一种等待方法,为什么不在上一篇文章中竹筒倒豆子一股脑的全部说完,反而又在这里单独写了一篇.那是因为这个比较重要,所 ...
- 《手把手教你》系列技巧篇(六十五)-java+ selenium自动化测试 - cookie -下篇(详细教程)
1.简介 今天这一篇,宏哥主要讲解:利用WebDriver 提供可以读取.添加和删除cookie 信息的相关操作方法.验证浏览器中是否存在某个cookie.原因是:因为基于真实的cookie 的测试是 ...
- 《手把手教你》系列技巧篇(四十五)-java+ selenium自动化测试-web页面定位toast-上篇(详解教程)
1.简介 在使用appium写app自动化的时候介绍toast的相关元素的定位,在Web UI测试过程中,也经常遇到一些toast,那么这个toast我们这边如何进行测试呢?今天宏哥就分两篇介绍一下. ...
- 《手把手教你》系列基础篇(八十五)-java+ selenium自动化测试-框架设计基础-TestNG自定义日志-下篇(详解教程)
1.简介 TestNG为日志记录和报告提供的不同选项.现在,宏哥讲解分享如何开始使用它们.首先,我们将编写一个示例程序,在该程序中我们将使用 ITestListener方法进行日志记录. 2.Test ...
- 跟我学SpringCloud | 第十五篇:微服务利剑之APM平台(一)Skywalking
目录 SpringCloud系列教程 | 第十五篇:微服务利剑之APM平台(一)Skywalking 1. Skywalking概述 2. Skywalking主要功能 3. Skywalking主要 ...
- Egret入门学习日记 --- 第十五篇(书中 6.1~6.9节 内容)
第十五篇(书中 6.1~6.9节 内容) 好的,昨天完成了第五章. 今天来看第六章. 总结重点: 1.如何对组件进行分组? 跟着做: 重点1:如何对组件进行分组? 首先,选中你想要组合的组件. 然后点 ...
- java 操作Oracle 批量入库的问题
java 操作Oracle 批量入库的问题 先说下我运行的环境: Windows7 64位操作系统 (四核)Intel i5-2300 CPU @2.80GHz 内存4G 硬盘1T Jdk1.6+My ...
随机推荐
- mysql服务命令行操作
启动 net start mysql 关闭 net stop mysql 登陆 mysql -hlocalhost -uusername -ppassword 退出 exit 显示数据库 show d ...
- [原创]Delphi 字符串函数(字符串判断 TryStrToFloat 、TryStrToInt、TryStrToInt64、TryStrToBool、TryStrToCurr、TryStrToDate、TryStrToTime、TryStrToDateTime)
引用单元SysUtils TryStrToFloat .TryStrToInt.TryStrToInt64.TryStrToBool.TryStrToCurr.TryStrToDate.TryStrT ...
- CSS案例1(导航栏)
文本的装饰 text-decoration 通常我们用于给链接修改装饰效果 使用技巧:在一行内的盒子内,我们设定行高等于盒子的高度,就可以使文字垂直居中. <head> <meta ...
- NX二次开发-UFUN获取工程图的数量和tag UF_DRAW_ask_drawings
NX9+VS2012 #include <uf.h> #include <uf_draw.h> #include <uf_part.h> #include < ...
- three.js-走进3d的奇妙世界一创建一个三维场景
一.git代码仓库地址 git clone https://github.com/josdirksen/learning-threejs-third 下载并解压 二.创建一个三维场景 如下图所示 ...
- Hadoop国内主要发行版本
Hadoop主要版本 目前国内使用的不收费的Hadoop版本主要包括以下3个: Apache hadoop Cloudera的CDH Hortonworks版本(Hortonworks Data Pl ...
- 【Web】浅析JQuery的apply(), call(), bind()方法
原文地址:https://blog.csdn.net/whuzxq/article/details/64166253 由于在理解this的用法的时候多次出现了这几个方法,个人对这几个方法理解的不是很透 ...
- project2_login(登录窗口)
该project是在网易云课堂上的公开课<用 python 和 tkinter 做简单的窗口视窗>课程当中学习的,是该课程中的一个结课小项目,项目中的知识点内容涉及该课程中所学习到的大多数 ...
- LeetCode刷题笔记-BFS-二叉树层次遍历
题目描述: 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ ...
- 剑指offer——14机器人的运动范围
题目描述 地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子. 例如,当k为18时,机器人能 ...