java调用数据库中的函数备份oracle数据库

一般的oracle备份大家都用exp,现在碰到了需要在java中备份oracle数据库的问题。

因为很多情况,时间运行的服务器可能和 oracle数据库服务器是不同的服务器,所以不能直接用exp在cmd命令窗口备份。于是就想到了把exp写成 存储过程或者  函数的形式,存到数据库里面,然后在java程序中直接连到数据库调用 之。

自己写了个例子,oracle的 用户名test,密码test。

参考的文章有:

点击打开链接

点击打开链接



下面是创建函数的代码,这里可以再sql窗口执行,也可以在命令窗口执行。我指的是  pl/sql developer   和   sql*plus

最后可以被分到 c:\aabc\+输入的名字     

create or replace and compile java source named ee11 as
 
public class ExpA11 {
public static String expFangfa(String name) throws Exception{
Runtime rt = Runtime.getRuntime();
String command = new String("exp ecjobht/ecjobht@localhost:1521/orcl file=c:\\aabc\\"+name);
java.io.File file = new java.io.File("c:/aabc/");
if (!file.exists()) {
file.mkdir();
}
 Process child = rt.exec(command);
java.io.InputStreamReader isr = new java.io.InputStreamReader(child.getErrorStream());
java.io.BufferedReader br = new java.io.BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
if (line.indexOf("错误") != -1) {
break;
}
 }
 child.destroy();
 
return "success";
}
}
/

CREATE   OR   REPLACE   FUNCTION eefunc11(nam varchar2) RETURN   VARCHAR2
as language java name'ExpA11.expFangfa(java.lang.String) return java.lang.String';
/


然后是在命令窗口调用的代码

set   serveroutput   on;
var   v5   varchar2(25);
call   eefunc11()   into   :v5;

然后是java中调用的demo,记得引入ojdbc6.jar包


public class Test1 {
	public static Connection conn = null;
	public static void main(String[] args) {
		Test1 t1= new Test1();
		CallableStatement cs ;//= null;
		Connection connection ;//= null;
		try{
			connection = t1.getSqlConnection();
			cs = connection.prepareCall("{? = call eefunc11(?)}");
			cs.registerOutParameter(1, Types.VARCHAR);
			cs.setString(2, fileName);
			cs.execute();


			String strValue = cs.getString(1);
			System.out.println("哈哈is:" + strValue);
			cs.close();
		}catch (Exception e1){
			e1.printStackTrace();
		}finally {
			t1.closeConnection();
		}
	}
	//获取连接
	public Connection getSqlConnection(   ){
		try{
			Class.forName("oracle.jdbc.driver.OracleDriver");
		    conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL",
		    		"test" , "test");
		}catch(Exception e){
			e.printStackTrace();
		}
		return conn;
	}	
	public void closeConnection(){
		if(conn != null){
			try{
				conn.close();
			}catch(SQLException e){
				e.printStackTrace();
			}
		}
	}
}








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值