Java代码调用Sqlldr命令例子
目录
Java代码调用Sqlldr命令例子
- 控制文件test.ctl
LOAD DATA
INFILE 'C:\case.csv'
APPEND
INTO TABLE T
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
(
A CHAR,
B CHAR
)
- 数据文件case.csv
1,2
a,b
b,c
c,d
- 完整例子
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
public class JavaSqlldr {
public static final String ctlFileDir = "C:\\";
public static final String logFileDir = "C:\\";
public static void main(String[] args) {
String username = "SYS";
String password = "123";
String Database = "@ORCL";
String ctlFileName = "test.ctl";
String logFileName = "test_table.log";
boolean isDBA = true;
String command = buildCommand(
username,
password,
Database,
isDBA,
JavaSqlldr.ctlFileDir,
ctlFileName,
JavaSqlldr.logFileDir,
logFileName
);
Executive(command);
}
/**
* @param username
* @param password
* @param Database
* @param isDBA
* @param ctlFileDir
* @param ctlFileName
* @param logFileDir
* @param logFileName
* @return
* the sql loader command
*/
public static String buildCommand(
String username,
String password,
String Database,
boolean isDBA,
String ctlFileDir,
String ctlFileName,
String logFileDir,
String logFileName) {
StringBuffer command = new StringBuffer();
command.append("sqlldr ");
command.append(isDBA ? "'" : "");
command.append(username);
command.append("/");
command.append(password);
command.append(Database);
command.append(isDBA ? " as sysdba'" : "");
command.append(" control=" + ctlFileDir + ctlFileName);
command.append(" log=" + logFileDir + logFileName);
System.out.println("Command : " + command.toString());
//command : sqlldr 'SYS/123@ORCL as sysdba' control=C:\test.ctl log=C:\test_table.log
return command.toString();
}
/**
* To call DOS command
*/
public static void Executive(String command) {
InputStream ins = null;
String[] cmd = new String[] { "cmd.exe", "/C", command }; // 命令
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();
System.out.println("Returned value was:" + exitValue);
if(exitValue == 0) {
System.out.println("The records were loaded successfully");
}else {
System.out.println("The records were not loaded successfully");
}
process.getOutputStream().close(); // 关闭
} catch (Exception e) {
e.printStackTrace();
}
}
}