飛翔的起點(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中獲取,這是我以前寫的
          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)致了按照正常的情況去寫這段代碼的話反而會(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

          主站蜘蛛池模板: 兴安盟| 泾阳县| 衡东县| 宣威市| 遵化市| 从化市| 抚顺市| 炎陵县| 军事| 临海市| 盈江县| 同心县| 多伦县| 东辽县| 沽源县| SHOW| 论坛| 定结县| 桂林市| 浦北县| 清流县| 阿拉善盟| 遂昌县| 元氏县| 巫山县| 龙井市| 乌什县| 象州县| 霍林郭勒市| 深圳市| 关岭| 四会市| 英山县| 平原县| 达拉特旗| 盐边县| 晋城| 招远市| 沙田区| 武宣县| 都匀市|