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();
txtFilePath=CONFReader.getTxtPath();//得到文件路径。 txtFileName= CONFReader.getTxtFILENAME_CHTH();
//得到txt文件名dbo_M_CHTH.txt --->表:RPP_CONV_TH txtToDB( txtFilePath + txtFileName );//调用函数,开始处理。 txtFileName= CONFReader.getTxtFILENAME_CHTS();
//得到txt文件名dbo_M_CHTS.txt --->表:RPP_CONV_TS txtToDB( txtFilePath + txtFileName ); } }
××××××××××××××××××××××××××××××××××××
CONF.PROPERTY中文件路径的配置:
TXTPATH=txt/
txtFILENAME_CHTH=dbo_M_CHTH.txt
txtFILENAME_CHTS=dbo_M_CHTS.txt
××××××××××××××××××××××××××××××××××××
调用CONFReader.java 中的部分:
package jp.co.ricoh;
import java.util.*;
import java.io.*;
final public class CONFReader{
//デフォールトプロパティーファイル
private static String CONFIG_FILE = "./CONF.PROPERTY";
//private static ExProperties propConfig = null;
private static Properties propConfig = null;
private CONFReader(){
}
public static void init(){
propConfig = new Properties();
try{
FileInputStream isConfigFile = new FileInputStream(CONFIG_FILE);
propConfig.load(isConfigFile);
isConfigFile.close();
}
catch(Exception ex){
ex.printStackTrace();
}
}
………
public static String getTxtPath(){
return getValue("TXTPATH");
}
public static String getTxtFILENAME_CHTH(){
return getValue("txtFILENAME_CHTH");
}
public static String getTxtFILENAME_CHTS(){
return getValue("txtFILENAME_CHTS");
}
}
———————————————————————结束!