在使用 oracle 数据库时,遇到的问题,和解决的方法

    没有 安装 oracle 数据的 可以查看:   

        上一篇文章:        oracle数据的安装,与基本配置


1. 安装配置完 oracle 数据库后,在命令行(sqlplus) 下使用 oracle 一切正常

    但是oracle 自带的 SQL developer 却死活登不上去 ! 一直报,网络适配器 的错误.

    于是到网上去找了 解决方法.

    然后发现是 网络 地址 和 服务的问题:

     1)      由于很多时候 IP 地址是可变的. 安装的时候 自动生成的 IP 很可能

        跟 你使用 数据库时,IP 不同.所以,就是由于 IP 不同包报错:

        找到 安装目录 里的:    listener.ora     tnsnames.ora  这两个文件

         我的安装目录:      D:\app\Administrator\product\12.2.0\dbhome_1\network\admin

    然后 用记事本打开上面两个文件:

            把其中的 IP 地址, 改成 对应的IP, 我改的 是 localhost.

        2)    按下 Windows 键,搜索  服务 (第一个): 

                    

                    然后 全部打开:

                        


            找到 其中 oracle开头的全部打开 (打开部分就行,自行百度吧.楼主是全部打开):

              然后重启 SQL developer 不行就 重启电脑. 我是 重启电脑,第二天 来 就 OK 的 汗....

    2. 这里不是 问题, 是一个配置.

        到 官网 下载 一个 oracle 12 版本对应的  jdbc 包,或者:

        到安装目录下,找 叫 ojdbc8.jar 的文件

        我的路径;  D:\app\Administrator\product\12.2.0\dbhome_1\jdbc\lib

        直接导入项目,或者 自建 pom 路径导入.我是 自建 pom 路径 通过 maven导入;

           直接导入,项目 到时候可能找不到  此驱动...

    3.项目 要求 创建 一个 有 主键 加自增的 表,但是 oracle 却不支持 auto_crement 这个

        关键字.于是,只能用 触发器,做一个 自增:

                 看不懂的话,自行 百度 oracle主键自增长.

CREATE TABLE t_dict_areas (
  id number(11) NOT NULL,
  city_code varchar2(6) DEFAULT NULL,
  area_code varchar2(6) DEFAULT NULL,
  area_name varchar2(16) DEFAULT NULL,
  PRIMARY KEY (id)
);
-- 创建序列
create sequence seq_t_dict_areas
minvalue 1
nomaxvalue
start with 1
increment by 1
nocycle  -- 一直累加,不循环
nocache;
 
 
-- 创建触发器,如果insert语句不指定ID自动插入增长值
CREATE OR REPLACE TRIGGER tr_t_dict_areas
BEFORE INSERT ON t_dict_areas FOR EACH ROW WHEN (new.id is null)
begin
select seq_t_dict_areas.nextval into:new.id from dual;
end;

4. 测试 插入数据的时候 可能 会遇到,一个 对 users 表空间 无权限的问题.

        要用 (  前提登录 超级管理员 sys )  ALTER USER userName QUOTA UNLIMITED ON USERS;

        或者 自行 分配其他表空间,或者自行创建表空间 ,然后分配 表空间.自己权限不够 就登陆 sys 超级 管理员

5. 使用 oracle 提供的 jdbc 和 mybatis 框架的 一些规定:

       1)  mybatis 的 配置文件 sql 语句 不能 使用 ; 号 结尾, mysql 没有硬性要求.

       2)  每条查询语句,都要指定 返回值类型 即使返回自类型 是 节本类型:

                  加上,  resultType="java.lang.String"

     3) 附:常见的Jdbc Type 与 Java Type之间的关系:      

JDBC Type            Java Type  
CHAR                 String  
VARCHAR              String  
LONGVARCHAR          String  
NUMERIC              java.math.BigDecimal  
DECIMAL              java.math.BigDecimal  
BIT                  boolean  
BOOLEAN              boolean  
TINYINT              byte  
SMALLINT             short  
INTEGER              int  
BIGINT               long  
REAL                 float  
FLOAT                double  
DOUBLE               double  
BINARY               byte[]  
VARBINARY            byte[]  
LONGVARBINARY        byte[]  
DATE                 java.sql.Date  
TIME                 java.sql.Time  
TIMESTAMP            java.sql.Timestamp  
CLOB                 Clob  
BLOB                 Blob  
ARRAY                Array

6.当报无效的列类型 (就是 试图 插入一个 #{username} 解析 为 null 值的时候):

    有两种解决方式:

        1)    where id = #{id,jdbcType=VARCHAR} 

        所有 语句 都改成这种形式 -- 不推荐,好麻烦!

        2)    application-dao.xml  文件 里的 该类加上这个属性

            (不管哪个文件 ,只要是是 配置 SqlSessionFactoryBean 这个类 的属性设置:)

<!-- 配置SqlSessionFactoryBean -->
	<bean class="org.mybatis.spring.SqlSessionFactoryBean">
			...

	<property name="configLocation"		
			value="classpath:config/SqlConfig.xml" />
			.....
	</bean>

                然后在 对应的 路径 config/SqlConfig.xml 文件里写上:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-config.dtd">  
<configuration>  
       ... 
    <settings>
        <setting name="jdbcTypeForNull" value="NULL" />
    </settings>
       ... 
</configuration>

7. 用 myeclipse 2017 + oci jdbc + oracle 的 时候 遇到的一个错误 ( eclipse 不会报,可以自行忽略):

    no ocijdbc12 in java.library.path

需要在 Tomcat 的 Arguments 加上 : (也就是,你 ocijdbc12.dll 所在的路径)

    

         如何打开这个窗口?

        右键 你的 web 项目, run as > run counfigurations >(左边栏) myeclipse Tomcat 8.5 > (右边栏)Argumetms  然后如 上图 加上那个路径,即可!


    到这里,oracle 就 可以 正式投入使用.

    另外希望这篇文章 可以帮助到你!

猜你喜欢

转载自blog.csdn.net/weixin_42144379/article/details/80965647