一般的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();
}
}
}
}