我用Java制作了一个执行bat的网站,因为我们将数据批量加载到Oracle。我已经使用SQLLDR命令创建了一个批处理文件,以将txt文件的内容(在Java Web中上传)加载到Oracle表中(也运行SP)。
我的批处理是一个模板,数据输入Java:
CD E:\temp E: SQLLDR login/password@database control=%1 log=%2 DATA=%3
ERRORS=999999
下面是CTL命令的示例(我用Java创建CTL):
选项(SKIP = 1)在文件'B3475720190305181118.txt'中加载数据TRUNCATE 将空白保留到以“ |”结尾的表DGOV_DATAENTRY_TMP字段中 跟踪NULLCOLS(TIPDOC,CODDOC,FLG_DIRECCION,FLG_EMAIL ,FLG_TELEFONO,USU_SOLICITUD,ID_SOLICITUD)
我知道我的CTL和批处理文件都可以,因为当我仅执行BAT(无Java)时,它将加载所有数据。但是在我的网站上没有。
我有问题。当数据少于398寄存器时,不加载:
但是,如果数据大于399,则会使用Java代码加载。但是我看到它加载了总计198个寄存器。
这也是LOG文件(不插入数据时):
Java代码:
public static int ejecutarBat(List<String> listComan) {
int result=-1;
logger.info("Iniciando ejecucion .BAT");
ProcessBuilder processBuilder = new ProcessBuilder(listComan);
try {
Process process = processBuilder.start();
StringBuilder output = new StringBuilder();
BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
output.append(line + "\n");
}
int exitVal = process.waitFor();
if (exitVal == 0) {
logger.info(output.toString());
} else {
//abnormal...
}
logger.info("Respuesta: "+exitVal);
result=exitVal;
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return result;
}