将java的jar包导入oracle,通过oracle调用java方法

           最近项目上遇到一个问题,因为项目一些数据设计保密的问题,所以数据库的很多数据都是脱敏存储的;但是需求又需要去模糊查询,这就蛋疼了, 由于项目是用base64脱敏的;第一次想到了把条件进行脱敏之后去数据库匹配, 经过测试之后发现,中文脱敏之后去数据库模糊查询是可行的,但是字母和数字脱敏之后就匹配不上了(这可能与加密方式有关,具体没研究过).

           后来又想到了又缓存,把所有数据查出来之后,再来项目中处理;但是后来一起研究以后发现,这样有点儿大材小用了 

          最后一种方式就是本文介绍的方式,由于脱敏的jar已经封装好,所以把这个jar导入进oracle之后,再在oracle 里面写个函数(可以手写代码,也可以在oracle里面选择函数自动生成),通过这个函数来调用java的方法就可以了,为什么oracle可以执行java代码?因为它里面有一个jvm.

   

           具体步骤:

           ###将jar包导入 oracle

           loadjava -r -f -o -u dataBaseName/[email protected]:1521/name  -v  -resolve   D:work\test.jar  (jar包地址)

          (dataBaseName:数据库名称 , password:密码, 10.20.111.11:1521/name:数据库连接地址, test.jar:需要导入的jar包)

          ###查看是否已经导入jar包

         select *  from user_java_classes;

         (注意,在最初导入的时候我们遇到一个问题,一直导入失败,提示找不到类;最后我们发现这个错误是因为,这个脱敏jar包里面有很多类,还关联了其它一些jar包,由于我们只导入了这个jar包,其它相关联的没有导入,所以提示这个错误,后来我们把脱敏的相关类,单独提出来,作成一个新的jar导入进去就ok了)!

      

         ###新建function

       create or replace function decrpt(ins  varchar2)  return varchar2  as 

       LANGUAGE JAVA NAME  'com/test/t/des/utils/DeUtil.decrypt(java.lang.String) return java.lang.String', 

       (也可以通过菜单选择函数自动生成,此段代码可以和sql语句一样执行,decrpt是java中我们要执行的方法名称)


       由于有时候我们会导入出错,所以提供了删除功能

      ### 删除 

      dropjava -u   dataBaseName/[email protected]:1521/name -v  com/test/t/des/utils/DeUtil


     最后执行查询

    select  decrpt(name)  from table



你可能感兴趣的:(将java的jar包导入oracle,通过oracle调用java方法)