Windows環(huán)境下測(cè)試代碼:

import java.io.File;import java.io.FileNotFoundException;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import java.io.PRintWriter;import java.util.Scanner;public class testTimer { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub // ./szrpp_files/clPath //寫控制文件.ctl String fileRoute = "D://files//";//文件地址路徑 String fileName = "db.txt";//數(shù)據(jù)文件名 String tableName = "testtable";//表名 String fieldName = "(Source,File,Date,FileNum,RechargeSerial,Status)";//要寫入表的字段 String ctlfileName = "ctlName.ctl";//控制文件名 stlFileWriter(fileRoute,fileName,tableName,fieldName,ctlfileName); //要執(zhí)行的DOS命令 String user = "SCOTT"; String psw = "123456"; String Database = "ORCL"; String logfileName = "logName.log"; Executive(user,psw,Database,fileRoute,ctlfileName,logfileName); } /** * * 寫控制文件.ctl * @param fileRoute 數(shù)據(jù)文件地址路徑 * @param fileName 數(shù)據(jù)文件名 * @param tableName 表名 * @param fieldName 要寫入表的字段 * @param ctlfileName 控制文件名 */ public static void stlFileWriter(String fileRoute,String fileName,String tableName,String fieldName,String ctlfileName) { FileWriter fw = null; String strctl = "OPTIONS (skView Codelinux環(huán)境下的測(cè)試代碼:
import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;public class TestLinux { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub // ./szrpp_files/clPath //寫控制文件.ctl String fileRoute = "/home/test/files/clPath/";//文件地址路徑 String fileName = "db.txt";//數(shù)據(jù)文件名 String tableName = "testtable";//表名 String fieldName = "(Source,File,Date,FileNum,Status)";//要寫入表的字段 String ctlfileName = "ctltest.ctl";//控制文件名 stlFileWriter(fileRoute,fileName,tableName,fieldName,ctlfileName); //要執(zhí)行的DOS命令 String user = "scott"; String psw = "123456"; String Database = "ORCL"; String logfileName = "logtext.log"; Executive(user,psw,Database,fileRoute,ctlfileName,logfileName); } /** * * 寫控制文件.ctl * @param fileRoute 數(shù)據(jù)文件地址路徑 * @param fileName 數(shù)據(jù)文件名 * @param tableName 表名 * @param fieldName 要寫入表的字段 * @param ctlfileName 控制文件名 */ public static void stlFileWriter(String fileRoute,String fileName,String tableName,String fieldName,String ctlfileName) { FileWriter fw = null; String strctl = "OPTIONS (skip=0)" + " LOAD DATA INFILE '"+fileRoute+""+fileName+"'" + " APPEND INTO TABLE "+tableName+"" + " FIELDS TERMINATED BY ','" + " OPTIONALLY ENCLOSED BY /"'/"" + " TRAILING NULLCOLS "+fieldName+""; try { fw = new FileWriter(fileRoute+""+ctlfileName); fw.write(strctl); } catch (IOException e) { e.printStackTrace(); } finally { try { fw.flush(); fw.close(); } catch (IOException e) { e.printStackTrace(); } } } /** * 調(diào)用系統(tǒng)DOS命令 * @param user * @param psw * @param Database * @param fileRoute 文件路徑 * @param ctlfileName 控制文件名 * @param logfileName 日志文件名 */ public static void Executive(String user,String psw,String Database,String fileRoute,String ctlfileName,String logfileName) { InputStream ins = null; //要執(zhí)行的DOS命令 String dos="sqlldr "+user+"/"+psw+"@"+Database+" control="+fileRoute+""+ctlfileName+" log="+fileRoute+""+logfileName; //Linux環(huán)境下注釋掉 //String[] cmd = new String[] //{ "cmd.exe", "/C", dos }; // Windows環(huán)境 命令 try { Process process = Runtime.getRuntime().exec(dos); ins = process.getInputStream(); // 獲取執(zhí)行cmd命令后的信息// BufferedReader reader = new BufferedReader(new InputStreamReader(ins));// String line = null;// while ((line = reader.readLine()) != null)// {// String msg = new String(line.getBytes("ISO-8859-1"), "UTF-8");// System.out.println(msg); // 輸出// } int exitValue = process.waitFor(); if(exitValue==0) { System.out.println("返回值:" + exitValue+"/n數(shù)據(jù)導(dǎo)入成功"); }else { System.out.println("返回值:" + exitValue+"/n數(shù)據(jù)導(dǎo)入失敗"); } process.getOutputStream().close(); // 關(guān)閉 } catch (Exception e) { e.printStackTrace(); } }}View Code特別注意:
1.你的程序部署在什么服務(wù)器下面 是在Oracle數(shù)據(jù)庫(kù)服務(wù)器下 數(shù)據(jù)庫(kù)連接配置地址可以不指明,如果部署在其他服務(wù)器下不在數(shù)據(jù)庫(kù)服務(wù)器下數(shù)據(jù)庫(kù)名的連接地址要指向明確的 所在數(shù)據(jù)庫(kù)服務(wù)器IP地址,這個(gè)自己可以多次試驗(yàn)測(cè)試就曉得了。
2.測(cè)試程序只是實(shí)現(xiàn)了功能,但是放到你的項(xiàng)目程序中一定要多多測(cè)試自然會(huì)發(fā)現(xiàn)問(wèn)題的,這個(gè)測(cè)試代碼放到你的項(xiàng)目中時(shí)候一定要注意一些代碼的改造,具體自己多測(cè)試就發(fā)現(xiàn)了。可以簡(jiǎn)單說(shuō)明下 就在Executive()這個(gè)方法里面的代碼只要稍加改造就好了,自己摸索下就明白了。
3.控制文件路徑最好這樣使用在引用到項(xiàng)目中時(shí)候:control="+clPath+File.separator+ctlfileName+" log="+clPath+File.separator+logfileName
4.針對(duì)這段代碼具體描述下
String strctl = "OPTIONS (skip=0)" + // 0是從第一行開(kāi)始 1是 從第二行 " LOAD DATA INFILE '"+fileRoute+""+fileName+"'" + " APPEND INTO TABLE "+tableName+"" + //覆蓋寫入 " FIELDS TERMINATED BY ',' " + //--數(shù)據(jù)中每行記錄用","分隔 ,TERMINATED用于控制字段的分隔符,可以為多個(gè)字符。 " OPTIONALLY ENCLOSED BY /"'/"" + //源文件有引號(hào) '',這里去掉 ''''" " TRAILING NULLCOLS "+fieldName+"";//--表的字段沒(méi)有對(duì)應(yīng)的值時(shí)允許為空 源數(shù)據(jù)沒(méi)有對(duì)應(yīng),寫入null
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注