笔记九、Java实现Oracle数据库备份/恢复

整理Java实现Oracle数据库导入/导出

     * 导入/导出数据
     * @param isImp true-导入,false-导出
     * @param cmd cmd命令
     * @return 执行后的提示信息
     */
    public String impOrExpData(Boolean isImp ,String cmd){
        Process process = null;
        String message = null;
        Runtime runtime = Runtime.getRuntime();
        try {
            //执行cmd命令(导入/导出)
            process = runtime.exec(cmd);
            //将process中流的数据存入日志文档,并获取process中的信息
            message = inputToFile(process.getErrorStream(),isImp);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return message;
    }

    /**
     * 将流的文字信息存入文档,并返回该文字信息
     * @param inputStream 包含信息的流
     * @param isImp true-导入,false-导出
     * @return 流中的文字信息
     */
    private String inputToFile(InputStream inputStream, Boolean isImp){
        String fileName = null;
        BufferedReader reader = null;
        BufferedWriter writer = null;
        StringBuilder builder = new StringBuilder();
        if(isImp == true){
            //导入时文件提示信息的日志文件名
            fileName = "ImpMessage_"+ UUID.randomUUID().toString() + ".txt";
        }else{
            //导出时文件提示信息的日志文件名
            fileName = "ExpMessage_"+ UUID.randomUUID().toString() + ".txt";
        }
        try {
            //读取字符流
            reader = new BufferedReader(new InputStreamReader(inputStream));
            //写出字符流
            writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName)));
            String line = null;
            while((line = reader.readLine())!= null){
                builder.append(line+"\r\n");
                //写出到文件日志中, \r\n时换行
                writer.write(line+"\r\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                if(reader!=null) {
                    reader.close();
                }
                if(writer!=null){
                    writer.close();
                }
                if(inputStream!=null){
                    inputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return builder.toString();
    }
    /**
     * 根据条件获取导入/ 导出cmd命令
     * @param isImp true-导入,false-导出
     * @param name 用户名
     * @param password 密码
     * @param postNo 端口号
     * @param SID 数据库实例
     * @param url 保存/文件路径
     * @param fileName 导入/导出的文件名
     * @return 导入/导出的cmd命令
     */
    private String getCmd(Boolean isImp ,String name ,String password ,String postNo,String SID,String url,String fileName){
        String cmd = null;
        if(isImp == true){
            //设置导入命令
            cmd = "cmd.exe /c imp " + name + "/" + password +
                    "@" + postNo + "/" + SID + " file=" + url + "/" + fileName +
                    " ignore=y" + " full=y";
        }else{
            //导出时如果url路径不存在,创建文件夹
            File file = new File(url);
            if(file.exists()){
                file.mkdirs();
            }
            //设置导出命令
            cmd = "cmd.exe /c exp " + name + "/" + password +
                    "@" + postNo + "/" + SID + " file=" + url + "/" + fileName;
        }
        return cmd;
    }
    
    /**
     * Java定时器(1)
     * @param isGo
     * @param time
     */
    public void getTimer(boolean isGo,long time){
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                //执行代码
                if(!isGo) {
                    timer.cancel();
                }
            }
        },100,time);
    }

猜你喜欢

转载自blog.csdn.net/weixin_43792738/article/details/94757501