工作日记1

2.运行环境:jdk7.0.78+apache-tomcat7.0.78+oracle12c;

项目开发完成第一次部署前,做以下调整,将mysql数据库转化为oracle12c数据库,做完调整部署后,由于数据库sql标准差异,系统在服务器端运行时出现以下问题,工作任务模块所有增删改查均存在同样问题,数据无法插入数据库中,在表单输入数据提交时,前台报错:could not excute statement(无法执行语句),但查看后台时,并不报任何错误。导致项目无法正常调试。后来经过开发人员修改后,需要说明的是,修改所用数据库依旧是mysql,这是不应该的,将修改后的mysql转化为oracle12c时,出现以下问题:

在说明问题之前,先来说明转化规则(因为两数据库存在sql差异)将mysql建表语句中的数据类型varchar变varchar2,decimal(p,s)变number(p,s)。将字段的单引号变双引号,将create table 语句后的表名的单引号变双引号,把inser into 语句后的表名的单引号变双引号。删掉每张建表语句前的drop table if exitst ‘表名’语句。删掉每张建表语句最后的指定字符集的语句ENGINE=MyISAM DEFAULT CHARSET=utf8;

完成以上修改后,建表语句会在ORACLE12C数据库中无错执行,表成功建立。

上面我们提到了将mysql 数据库转化为ORACLE12C数据库后出现的一系列问题,其实这些问题都出现在执行insert into 语句时,就是向表中插入数据时出现。原因很简单,因为这些insert into 语句是以mysql 的数据标准写的,不符合ORACLE12C的标准。对这些问题做详细说明:

1.1 ORA-100904:无效的月份。

出现该问题的原因是插入timestamp类型的日期时,mysql的日期格式不符合ORACLE12C数据库的日期格式造成的,mysql的日期输入格式是:年-月-日 时:分:秒,如(‘2017-12-18 12:18:18’)。但ORACLE12C支持的timestamp类型的日期输入格式是to_date(年/月/日 时:分:秒,YYYY/MM/DD  HH24:MI:SS),使用了to_date函数进行日期格式的输入。

例:to_date(‘2017/12/18 10:30:28’,’YYYY/MM/DD  HH24:MI:SS’)。

1.2 ORA-01400:无法将null插入到表中。

 这是由于数据库中的非空约束造成的,因为你在插入数据时,该字段具有非空约束,而你的insert into 语句中没给该字段值,ORACLE12C数据库中,必须给具有非空约束的字段一个值,不然insert into 语句执行过程中会报此错。以上两点问题解决后。Oracle数据库将成功创建,数据无错插入。接下来,以ORACLE12C做为数据库运行项目,项目在启动过程中会报以下错误:

1.3标识符无效:

出现这个问题的原因在于,ORACLE12C数据库中存在小写字段,当hibernate的查询方法执行条件查询时,不支持where子句中有小写的字段。应该重新回到oracle12c建表sql中,将sql 中所有小写字段改为大写,在重新执行sql,表再次重新创建,初始化数据也再次重新插入,此时在启动项目,系统将完美运行,成功登录并出现系统主界面。

 

 

 

 

猜你喜欢

转载自blog.csdn.net/weixin_38133660/article/details/80641264