好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

oracle如何使用java source调用外部程序

需求

Oracle调用第三方外部程序。Oracle使用sqluldr2快速导出大批量数据,然后用winrar压缩后发送邮件。

源码

java source

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

create or replace and compile java source named jv_run_extpro as

 

import java.io.*;

import java.lang.*;

import java.util.*;

import java.sql.*;

import oracle.sql.*;

publicclass jv_run_extpro

{

publicstaticvoid run(String cmd) throws IOException

{

Process p=Runtime.getRuntime().exec(cmd);

StreamGobbler errorGobbler = new StreamGobbler(p.getErrorStream(), "Error" );

StreamGobbler outputGobbler = new StreamGobbler(p.getInputStream(), "Output" );

errorGobbler.start();

outputGobbler.start();

try

 

{

p.waitFor();

}

catch (InterruptedException ie)

{

System.out.println(ie);

}

}

 

publicstaticclass

  StreamGobbler extends Thread {

  InputStream is;

String type;

 

 

public StreamGobbler(InputStream is, String type) {

this .is = is;

this .type = type;

 

}

 

 

 

publicvoid run() {

try {

InputStreamReader isr = new InputStreamReader(is);

BufferedReader br = new BufferedReader(isr);

String line = null ;

while ((line = br.readLine()) != null ) {

if (type.equals( "Error" )) {

System.out.println( "Error :" + line);

} else {

System.out.println( "Debug:" + line);

}

}

} catch (IOException ioe) {

ioe.printStackTrace();

 

}

 

}

 

}

 

}

存储过程

create or replace procedure pro_jv_run_extpro(p_cmd varchar2) as

language java name 'jv_run_extpro.run(java.lang.String)';

调用

?

1

2

3

4

5

6

begin

 

pro_jv_run_extpro( 'sqluldr264.exe scott/hh@pdborcl query="select * from emp" field=, head=yes file=D:\Desktop\tmp\sqluldr2\OUT2.TXT' );

pro_jv_run_extpro( '"D:\Program Files\WinRAR\Rar.exe" a -ep -df "D:\Desktop\tmp\sqluldr2\20160916.rar" "D:\Desktop\tmp\sqluldr2\OUT2.TXT"' );

 

end;

总结

Java source里StreamGobbler这个类不能少,用于异步读取命令的输出。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

查看更多关于oracle如何使用java source调用外部程序的详细内容...

  阅读:26次