1. 程式人生 > >Java 操作 .ctl 檔案匯入資料

Java 操作 .ctl 檔案匯入資料

1. 資料庫表 users

-- Create table
create table USERS
(
  id       VARCHAR2(32),
  name     VARCHAR2(200),
  password VARCHAR2(200),
  sj       VARCHAR2(200)
);

2. 資料檔案 users.txt ,中間使用的 "Tab" 符號

ID	NAME	PASSWORD	SJ
1	Unmi	3	2018
2	Tony	5	2008
3	張三	8	2009
4	Kypfos	4	2009
5	李四	1	2008

3. ctl檔案 user.ctl

Options (skip=1)
 Load Data Infile 'C:/ctl/users.txt'
 Append into table USERS
 Fields terminated by X'09'
 Optionally enclosed by '"'
 Trailing nullcols (ID,NAME,PASSWORD,SJ)

4. 執行 Dos 命令

sqlldr.exe userid=scott/[email protected]:1521/ORCL control=C:/ctl/users.ctl log=C:/ctl/users.log

5. 執行結果圖

6. Java實現

package workbench.functions;

import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class Sqlldr {

	/**
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		// 寫控制檔案.ctl
		String fileRoute = "C:/ctl/";		// 檔案地址路徑
		String fileName = "users.txt";		// 資料檔名
		String tableName = "USERS";			// 表名
		String fieldName = "(ID,NAME,PASSWORD,SJ)"; // 要寫入表的欄位
		String ctlfileName = "users.ctl";	// 控制檔名
		
		ctlFileWriter(fileRoute, fileName, tableName, fieldName, ctlfileName);
		
		// 要執行的DOS命令
		String user = "scoot";
		String psw = "tiger";
		String database = "172.25.21.163:1521/ORCL"; // IP要指向資料庫伺服器的地址
		String logfileName = "users.log";
		
		executeDos(user, psw, database, fileRoute, ctlfileName, logfileName);
	}

	/**
	 * * 寫控制檔案.ctl
	 * @param fileRoute 資料檔案地址路徑
	 * @param fileName  資料檔名
	 * @param tableName 表名
	 * @param fieldName 要寫入表的欄位
	 * @param ctlfileName 控制檔名
	 */
	public static void ctlFileWriter(String fileRoute, String fileName, String tableName, String fieldName, 
			String ctlfileName) {
		
		FileWriter fw = null;
		String strctl = "Options (skip=1)" + 
                        "\n Load Data Infile '" + fileRoute + "" + fileName + "'" + 
                        "\n Append into table " + tableName + "" + 
                        "\n Fields terminated by X'09'" + 
                        "\n Optionally enclosed by '\"'" + 
                        "\n Trailing nullcols " + fieldName + "";
		System.out.println(strctl);
		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();
			}

		}
	}
	
	/**
	 * * 呼叫系統DOS命令
	 * @param user
	 * @param psw
	 * @param Database
	 * @param fileRoute
	 * @param ctlfileName
	 * @param logfileName
	 */
	public static void executeDos(String user, String psw, String database, String fileRoute, String ctlfileName,
			String logfileName) {
		InputStream ins = null;
		// 要執行的DOS命令
		String cmd = "sqlldr.exe userid=" + user + 
                     "/" + psw + "@" + database + 
                     " control=" + fileRoute + ctlfileName + 
                     " log=" + fileRoute + logfileName;
		
		try {
			Process process = Runtime.getRuntime().exec(cmd);
			ins = process.getInputStream(); // 獲取執行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資料匯入成功");

			} else {
				System.out.println("返回值:" + exitValue + "\n資料匯入失敗");
			}

			process.getOutputStream().close(); // 關閉
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
}

相關推薦

Java 操作 .ctl 檔案匯入資料

1. 資料庫表 users -- Create table create table USERS ( id VARCHAR2(32), name VARCHAR2(200), password VARCHAR2(200), sj

java操作hdfs檔案資料

工具類HdfsUtils.java,及測試用例程式碼如下:   HdfsUtils.java     package com.xy6.demo.utils;   import java.io.ByteArrayIn

Java上傳Excel檔案匯入資料

Controller中接收form表單提交的檔案域: public Map importConsumer(@RequestParam("file") MultipartFile file) 讀取Excel工具類 這裡我以Consumer實體類來寫,大家可以自行封裝: pub

POI 操作 EXCEL檔案(匯入、匯出)

1.1概述 開發中經常會設計到excel的處理,如匯出Excel,匯入Excel到資料庫中,操作Excel目前有兩個框架,一個是apache 的poi, 另一個是 Java Excel Apache POI 簡介是用Java編寫的免費開源的跨平臺的 Java API,Ap

分散式系統詳解--框架(Hadoop--JAVA操作HDFS檔案

       分散式系統詳解--框架(Hadoop--JAVA操作HDFS檔案)         前面的文章介紹了怎麼將整個集群系統搭建起來,並進行了有效的測試。為了解決登入一臺伺服器登入其他伺服器需要多次輸入密碼的

嘗試json檔案匯入資料

recommand.json { "music":[ { "releasetime":"2018年11月24日", "title":"某一天,靈夢從此丟失了節操", "description":"妖歷201

python操作txt檔案資料教程[1]-使用python讀寫txt檔案

python操作txt檔案中資料教程[1]-使用python讀寫txt檔案 覺得有用的話,歡迎一起討論相互學習~Follow Me 原始txt檔案 程式實現後結果 程式實現 filename = './test/test.txt' contents = [] DNA_sequence

python操作txt檔案資料教程[2]-python提取txt檔案

python操作txt檔案中資料教程[2]-python提取txt檔案中的行列元素 覺得有用的話,歡迎一起討論相互學習~Follow Me 原始txt檔案 程式實現後結果-將txt中元素提取並儲存在csv中 程式實現 import csv filename = "./test/te

python操作txt檔案資料教程[3]-python讀取資料夾中所有txt檔案並將資料轉為csv檔案

python操作txt檔案中資料教程[3]-python讀取資料夾中所有txt檔案並將資料轉為csv檔案 覺得有用的話,歡迎一起討論相互學習~Follow Me 參考文獻 python操作txt檔案中資料教程[1]-使用python讀寫txt檔案 python操作txt檔案中資料教程[2]-pyth

java讀取配置檔案.properties資料

util.properties testkey=test123 java_web: import java.util.Properties; import org.springframework.stereotype.Component; /** * 獲取配置檔案資訊

Java實現Excel批量匯入資料

Excel的批量匯入是很常見的功能,這裡採用 Jxl實現,資料量或樣式要求較高可以採用 poi 框架環境:Spring + SpringMvc(註解實現) 首先匯入依賴jar包 <dependency> <groupId>ne

java操作PDF檔案 -- iText

iText是一種生成PDF報表的Java元件,通過iText不僅可以生成pdf檔案,而且可以將xml、html檔案轉換為pdf檔案。 生成PDF檔案 //Step 1—Create a Document. Document document = new Document();

MongoDB工具類:java操作檔案的增刪查改

前言   1.MongoDB,是一個基於分散式檔案儲存的資料庫,是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富、最像關係資料庫的,它的特點是高效能、易部署、易使用,儲存資料非常方便。在實際的專案操作中,我們不僅能用來儲存各種複雜的

java實現將檔案資料夾壓縮

由於專案需要,所以在網上找了一下看看有沒有java的壓縮檔案的例子,結果找到了一個,可以作為工具類直接使用,現將它釋出出來 public class UtilZipFile { private File targetFile; public UtilZi

java - 操作Excel檔案

<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version></depend

java程式碼實現檔案資料夾的壓縮和解壓

這裡寫了個工具類,可以實現檔案的壓縮和解壓功能。 package com.cntaiping.tpi.common.utils; import java.io.BufferedInputStream; import java.io.File; import java.io

vue+element -UI前端Excel 檔案匯入資料

在這裡我用到了一個外掛,需要在在main.js中全域性引入: import { export_excel_to_json, export_json_to_excel } from '@/api/operExcel' 下載地址:https://download.csdn.net/download

Java 操作xml檔案的dom4J庫使用

XML簡介 什麼是xml? XML 指可擴充套件標記語言(EXtensible Markup Language) XML 是一種標記語言,很類似 HTML XML 的設計宗旨是傳輸資料,而非顯示資料 XML 標籤沒有被預定義。您需要自行定義標籤。 XM

Java】對檔案資料夾進行重新命名

                在Java中,對檔案或資料夾進行重新命名是很簡單的,因為Java的File類已經封裝好rename

java操作csv檔案(讀、寫)

    今天在做專案的時候,發現使用POI無法解析以csv檔案結尾的檔案,雖然csv檔案能用Excel開啟,但是csv檔案沒有像Excel一樣有規定的電子表格形式,故使用POI無法解析csv檔案,在網上找了一下,發現java有提供javacsv檔案來幫忙解析cs