oracle调用java类遍历磁盘文件- Fangrn的j2ee,linux - JavaEye技术网站

利用oracle自带的utl_file包可以访问磁盘文件,但有个限制-- 无法访问文件夹?什么意思呢?就是说oracle只能访问指定的文件,而不能访问文件夹下的未知文件。所以,如果要通过oracle去遍历某指定路径下的 所有文件,sorry, impossible! 但是,有一种替代方案可以助你一臂之力!


众所周知java之File类指向的可以是目录也可以是文件,如果指向目录,可以用file.list()找到包含的文件及目录,so that,我可以用java来遍历文件,然后返回一个值给oracle再进行后续操作。


Come on, let's talk about this case!

oracle调用java可以分三个步骤:
{dy}步:在PLSQL客户端里写java代码(类及方法),实现oracle无法做的工作或你想要让java做的工作;

  1. --功能:返回所有文件字段串??
  2. create?or?replace?and?compile?java?source?named?file_list?as??
  3. import ?java.io.File;??
  4. public ? class ?file_list??
  5. {??
  6. ??public ? static ?String?entry(String?path)??
  7. ??{??
  8. ????StringBuffer?resultBuffer?=?new ?StringBuffer();??
  9. ????try {??
  10. ??????File?file?=?new ?File( "I:\\" +path);??
  11. ??????resultBuffer.append(file.getAbsolutePath());??
  12. ??????String[]?files?=?file.list();??
  13. ????????
  14. ??????resultBuffer.append("----" );??
  15. ??????for ( int ?i= 0 ;?i<files.length;?i++){??
  16. ??????????StringBuffer?fileStr?=?new ?StringBuffer( "<P?align='center'><IMG?src=" http: //www.qdda.gov.cn/"); ??
  17. ??????????fileStr.append(path.replace("?mce_src=" http: //www.qdda.gov.cn/"); ??
  18. ??????????fileStr.append(path.replace("\\',?' /'));??
  19. ??????????fileStr.append(files[i]);??
  20. ??????????fileStr.append("'></P>" );??????
  21. ??????????resultBuffer.append(fileStr.toString());??
  22. ??????}??
  23. ????}catch (Exception?ex){??
  24. ??????resultBuffer.append("----" );??
  25. ??????resultBuffer.append(ex);??
  26. ????}??????
  27. ????return ?resultBuffer.toString();??????
  28. ??}??
  29. }??


第二步:写oracle函数(function),调用java类方法;

第三步:写oracle存储过程(procedure)或客户端调用程序;

  1. create?or?replace?procedure?proce_transfer_data?as??
  2. ?url?varchar2(100 );??
  3. ?path?varchar2(100 );??
  4. ?img_url?varchar2(2000 );??
  5. --档案公布带图数据??
  6. ??cursor?cur1?is??
  7. ???select?*?from?ARCHIVE_PUBLICATION?t?where?t.big_event_id?is?null ?and?t.appendix_numb?>? 0 ?and?t.publish_order?is?not? null ;??
  8. ??r1?ARCHIVE_PUBLICATION%rowtype;??
  9. begin??
  10. ??open?cur1;??
  11. ????loop??
  12. ??????fetch?cur1?into?r1;????????????
  13. ??????exit?when?cur1%notfound;??
  14. ??????--找出重复的数据???
  15. ?????????
  16. ??????--图片目录??
  17. ??????if ?r1.publish_order?is? null ?then?????????
  18. ????????path?:=??'archives_files\'?||?substr(r1.archive_no,?1,?5)?||?' \ '??||?substr(r1.archive_no,?6,?3)??||?' \'?||???
  19. ????????substr(r1.archive_no,?9 ,? 5 )||? '\'??||??substr(r1.archive_no,?14,?4)?||?' \';??
  20. ??????else ???
  21. ????????path?:=?'archives_files\ziliao\'?||?r1.publish_order?||?' \';????????
  22. ??????end?if ;??
  23. ??????--dbms_output.put_line(path);??
  24. ?????--授权??
  25. ?????dbms_java.grant_permission(?'QDDA' ,? 'SYS:java.io.FilePermission' ,? 'I:\archives_files\',?' READ'?);??
  26. ????????
  27. ??????--图片路径??
  28. ??????img_url?:=?func_file_list(path);?????????
  29. ?????dbms_output.put_line(r1.id?||?img_url);??
  30. ????????
  31. ??????update?subject_articles?t?set?t.content?=?img_url?||?r1.content||',' ||r1.file_dz|| ',' ||r1.archive_no|| ',' ||r1.file_no,???
  32. ???????t.secondid?=?'12466747755782031001' ,?t.rootid= '12264731996871389001' ,?t.area?=? 'qd' ??
  33. ????????where?t.id?=?r1.id;????
  34. ??????commit??;??????
  35. ????end?loop;??
  36. ??????
  37. ??close?cur1;??
  38. ??commit;???
  39. ????
  40. end?proce_transfer_data;?

郑重声明:资讯 【oracle调用java类遍历磁盘文件- Fangrn的j2ee,linux - JavaEye技术网站】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——