while ((lineTxt = bufferedReader.readLine()) != null) {
total_cnt++;
if(!Common.columnInfo || total_cnt > 1){
Common.getCount("+");
}
if (!Common.columnInfo) { // 第一行为非列信息
Common.WriteThreadErrorLog(current_thd, Common.tableName + "表对应的数据文件 " + filePath + " 必须首行包含表列信息!");
break;
}
if(total_cnt != 1 && total_cnt <= row){
continue;
}
data = lineTxt.split(Common.colSplit);
insertdata = new String[Common.qxAssemblyField.length + data.length];
String sql = "";
if (total_cnt == 1) {
dataidx = new String[insertdata.length];
/********************************** 查找表字段对应的文本字段 *****************************************/
/******************************************组装字段整理*******************************************/
for (int i = 0; i < Common.qxAssemblyField.length; i++) {
for (int j = 0; j < col.size(); j++) {
if (Common.qxAssemblyField[i].equalsIgnoreCase(col.get(j).get(0))) {
dataidx[textCol.size()] = "-1";
textCol.add(col.get(j));
break;
}
}
}
/*****************************************文件表列信息*********************************************/
for (int i = 0; i < data.length; i++) {
boolean findFileColumn = false;
for (int j = 0; j < col.size(); j++) {
if (data[i].equalsIgnoreCase(col.get(j).get(0))) {
dataidx[textCol.size()] = Integer.toString(i);
textCol.add(col.get(j));
findFileColumn = true;
break;
}
}
if(!findFileColumn){
Common.WriteThreadErrorLog(current_thd, "数据文件:" + filePath + "中,列:" + data[i] + " 在表" + Common.tableName + "中未定义!");
success = false;
}
}
if(!success){
return success;
}
/****************************** 组装执行Prepare语句 ********************************/
aimSql = new StringBuffer();
aimSql.append("insert into " + Common.tableName + "(");
for (int i = 0; i < textCol.size(); i++) {
aimSql.append(textCol.get(i).get(0));
if (i != (textCol.size() - 1)) {
aimSql.append(",");
}
}
aimSql.append(") values(");
for (int i = 0; i < textCol.size(); i++) {
aimSql.append("?");
if (i != (textCol.size() - 1)) {
aimSql.append(",");
}
}
aimSql.append(")");
pstmt_aim = conn.prepareStatement(aimSql.toString());
} else {
/********************************** 取组装字段值 *****************************************/
for (int i = 0; i < Common.qxAssemblyField.length; i++) {
String assembData = Common.properties.getProperty(Common.tableName + "." + Common.qxAssemblyField[i]);
if (assembData.contains("[")) {
String[] idx = assembData.substring(assembData.indexOf("[") + 1, assembData.indexOf("]")).split(",");
String strParameter = assembData.substring(assembData.indexOf("]") + 1);
String[] paraType = null;
if (strParameter.contains("["))
paraType = strParameter.substring(strParameter.indexOf("[") + 1, strParameter.indexOf("]")).split(",");
if (idx[0].equals("")) {
parameters = new String[paraType.length];
messageFormat = new MessageFormat(assembData.substring(assembData.lastIndexOf("]") + 1));
for (int m = 0; m < paraType.length; m++) {
Statement st = conn.createStatement();
sql = "select " + paraType[m] + " from dual";
ResultSet rs = st.executeQuery(sql);
while (rs.next()) {
parameters[m] = rs.getString(1);
}
rs.close();
st.close();
}
insertdata[i] = messageFormat.format(parameters);
} else {
parameters = new String[idx.length];
messageFormat = new MessageFormat(assembData.substring(assembData.lastIndexOf("]") + 1));
for (int m = 0; m < idx.length; m++) {
if (paraType != null && m < paraType.length && paraType[m].contains("%")) {
parameters[m] = String.format(paraType[m], Integer.parseInt(data[Integer.parseInt(idx[m])].trim()));
} else {
parameters[m] = data[Integer.parseInt(idx[m])].trim();
}
}
insertdata[i] = messageFormat.format(parameters);
}
} else {
insertdata[i] = assembData;
}
}
/********************************** 取文本字段值 *****************************************/
if(insertdata.length != dataidx.length){
Common.WriteThreadErrorLog(current_thd, "目标表(" + Common.tableName + ")数据录入过程中产生数据组装异常!位置:" + filePath + ",行:" + total_cnt + ",错误信息:当前行数据量与首行列字段数不一致!");
chktxtdata = false;
}
for (int i = Common.qxAssemblyField.length; i < dataidx.length; i++) {
insertdata[i] = data[Integer.parseInt(dataidx[i])];
}
// 设置数据参数
if (chktxtdata) {
exec_str = insertTabByPst(pstmt_aim, insertdata, textCol);
if(exec_str.equals("OK")){
insert_cnt ++;
} else {
err_cnt++;
Common.WriteThreadErrorLog(current_thd, "目标表(" + Common.tableName + ")数据录入过程中产生SQL异常!位置:" + filePath + ",行:" + total_cnt + ",错误信息:" + exec_str);
}
} else {
err_cnt++;
}
}
// 提交数据
if ((total_cnt % Common.commit) == 0 && total_cnt > 1) {
try {
pstmt_aim.executeQuery();
PropertiesUtil.InsertOrUpdate(filePath, String.valueOf(total_cnt), pro,path);
conn.commit();
} catch (SQLException e) {
Common.WriteThreadErrorLog(current_thd, "目标表(" + Common.tableName + ")数据录入过程中产生COMMIT异常!位置:" + filePath + ",行:" + (total_cnt-Common.commit+1)+"——" + total_cnt + ",错误信息:" + e.getMessage());
}
}
}
bufferedReader.close();
read.close();
产生的警告为Resource leak: 'bufferedReader' is never closed