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];






















下面還有一種形式:
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