飛翔的起點(diǎn)

          從這里出發(fā)

          導(dǎo)航

          <2008年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          統(tǒng)計(jì)

          常用鏈接

          留言簿(5)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          java中使用oracle的exp/imp導(dǎo)出、導(dǎo)入數(shù)據(jù)

                    今天在學(xué)習(xí)的過(guò)程中遇到了一篇關(guān)于java中使用oracle導(dǎo)入導(dǎo)出的文章,感覺(jué)還不錯(cuò),為了學(xué)習(xí)和以后工作的需要,我整理如下:
                     String[] cmds 
          = new String[3];
                  cmds[
          0= "cmd";
                  cmds[
          1= "/C";
                  cmds[
          2]=commandBuf.toString();
                  Process process
          =Runtime.getRuntime().exec(cmds);
                  
          boolean shouldClose=false;
                  
          try {
                      InputStreamReader isr 
          = new InputStreamReader(process.getErrorStream());
                      BufferedReader br 
          = new BufferedReader(isr);
                      String line 
          = null;
                      
          while ((line = br.readLine()) != null){
                          
          if(line.indexOf("錯(cuò)誤")!=-1){
                              shouldClose
          =true;
                              
          break;
                          }

                      }

                  }
           
                  
          catch (IOException ioe) {
                      shouldClose
          =true;
                  }

                  
          if(shouldClose)
                      process.destroy();
                  
          int exitVal = process.waitFor();

                  下面還有一種形式:
          exp和imp的輸出是要從ErrorStream中獲取,這是我以前寫(xiě)的
          Process proc = null;
          try
          {
          proc = Runtime.getRuntime().exec(cmd.toString());
          InputStream istr = proc.getErrorStream();
          BufferedReader br = new BufferedReader(new InputStreamReader(istr));
          String str;
          while ((str=br.readLine()) != null)
          {
          errorInfo.append(str + "\n");
          }
          proc.waitFor();
          }
          catch (Exception e)
          {
          ...
          }
          if (proc.exitValue() == 0)
          {
          proc.destroy();
          return true;
          }
          else
          {
          if(logger.isDebugEnabled())
          logger.debug(errorInfo);
          proc.destroy();
          return false;

          兩者可以比較的看看
          注意:在執(zhí)行oracle的exp時(shí),出現(xiàn)了一個(gè)很怪的現(xiàn)象,就是exp在console輸出的信息沒(méi)有被放入InputStream,反而是放到了ErrorStream中(即使正確的情況也是),這就導(dǎo)致了按照正常的情況去寫(xiě)這段代碼的話反而會(huì)出問(wèn)題。---這是在jdk1.4環(huán)境下實(shí)現(xiàn)的。



          還有中建議是在jdk1.5環(huán)境下:可以如下實(shí)現(xiàn)
          1,把對(duì)InputStream的處理放到一個(gè)單獨(dú)Thread里面。
          2,用ProcessBuilder的redirectErrorStream來(lái)合并OutputStream和ErrorStream。注意子進(jìn)程的InputStream對(duì)應(yīng)父進(jìn)程的OutStream。如果不合并這兩個(gè)流的話則必須并行排空它們,順序的排空會(huì)導(dǎo)致思索。

          posted on 2008-06-13 11:57 forgood 閱讀(841) 評(píng)論(0)  編輯  收藏 所屬分類: java

          主站蜘蛛池模板: 尼勒克县| 青浦区| 卫辉市| 庄浪县| 于田县| 灵宝市| 景宁| 株洲市| 喀喇| 房产| 安平县| 遂平县| 英山县| 开平市| 剑川县| 赫章县| 屏山县| 砚山县| 嘉义县| 汽车| 托克托县| 内丘县| 云安县| 祁东县| 海宁市| 朔州市| 营山县| 霞浦县| 隆子县| 浦东新区| 治多县| 马山县| 永年县| 南宁市| 榆林市| 界首市| 莱州市| 南溪县| 通渭县| 库车县| 泽州县|