package jp.co.ricoh;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.sql.Connection;
import java.sql.PreparedStatement;
public class CodeChange {
public static void txtToDB(String file_path_name) throws Exception {
String file_nameTag="";
String table_name = "";
String filed1 = "";
String filed2 = "";
String filed_content = "";
boolean isFistLine = true;
int count_num=0; //写Log时,显示的处理成功的记录件数。
Connection db =null; // New一个连接对象db。
PreparedStatement stmt = null;
PreparedStatement stmt1 = null;
LogWriter Errlog = new LogWriter(true); //LogWriter:写Log的函数。
LogWriter InfLog = new LogWriter();
InfLog.WriteLog(" コード変換が開始, ファイル名: "
+ file_path_name+ "。",true);
// -------开始处理数据。
try {
db= new DBConnection().getConnection(); //一定要写在try内,以捕捉异常
File file = new File(file_path_name); //File 类提供了一种抽象方式,
//以便以与机器无关的方式处理机器相关情况下有关文件和路径名。
BufferedReader buffer = new BufferedReader(new FileReader(file));
//此处利用BufferedReader,从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
//dbo_M_CHTH.txt --->表:RPP_CONV_TH;dbo_M_CHTH.txt --->表:RPP_CONV_TH
//以下12行,只是据客户要求,对这两个txt文件,区分对应要插入的表和字段名。
file_name=file_path_name.substring(file_path_name.length()-5, file_path_name.length()-4);
if (file_nameTag.equals("H")) {
table_name = "RPP_CONV_TH";
filed1 = "BP_CD";
filed2 = "TH_CD";
} else if (file_nameTag.equals("S")) {
table_name = "RPP_CONV_TS";
filed1 = "BP_CD";
filed2 = "TS_CD";
}
String sqlClearTable = " DELETE FROM " + table_name;
//注意,此处不要用 TRANCATE TABLE ,太危险,无法回滚。
stmt = db.prepareStatement(sqlClearTable);
stmt.executeUpdate();
// executeUpdate()适用于删、插,如果单纯查询,可以用 stmt.execute()。
stmt.close(); //注意:此处非常有必要!如果不关闭prepareStatement ,
//就只能最大开299个线程,如果你的表记录条数超过300,也只能插入299条。
//为提高效率,应尽量避免把prepareStatement对象写在循环内部频繁操作。
while ((filed_content = buffer.readLine()) != null) {
if (!isFistLine) { //排除第一行,不插入。
String[] str = filed_content.split(","); //据txt文件内的逗号解析。
if (str == null) {
continue; //逐行的读完为止。
}
String sqlInsert = " INSERT INTO "
+ table_name
+ "( "+ filed1 + "," + filed2 + " )"
+ " VALUES"
+ " ('" + str[0] + "' , '" + str[1] + "' ) ";
stmt1 = db.prepareStatement(sqlInsert);
stmt1.executeUpdate();
stmt1.close(); //注意及时关闭prepareStatement。
count_num++; //插入数据成功次数,每次自增。
} else {
isFistLine = false;
}
}
db.commit(); // 别忘了提交!
db.close(); //把该关闭的连接关闭。
buffer.close();
InfLog.WriteLog(" コード変換が正常終了,ファイル名:" + file_path_name +", " + count_num + "件レコードを処理されました。" ,true);
InfLog.Release();
Errlog.Release();
} catch (Exception e) {
e.printStackTrace();
Errlog.WriteLog(" コード変換が異常終了,ファイル名:"+ file_path_name + ";" +"エラーメッセージ:"+ e.getMessage()+ "。" , true);
InfLog.WriteLog(" コード変換が異常終了,ファイル名:" + file_path_name + ","+ count_num + "件レコードを処理されました。", true);
InfLog.Release();
Errlog.Release();
if (db != null) { //出异常情况下,非空的连接也要关闭。
db.rollback(); //数据库回滚
db.close();
}
}
}
public static void main(String[] args) throws Exception {
String txtFileName="";
String txtFilePath="";
CONFReader.init();