上篇文章记录了配置文件的读写,属于系统功能的模块。而预处理、处理以及生产部分的实验,在本文章进行总结。
1. 预处理(文本源数据读入、解析、进入数据库)
预处理部分从文本元数据文件中读入文件,然后解析成数据表的内容,最后写入数据库。这个过程可以分为读文件、解析和写库三个部分。
读文件:使用br = new BufferedReader(new FileReader(file));来打开文件,进行读文件。使用StringBuffer来分行存储读入的数据文件到内存中。
解析文件:因为文件单行数据需要解析到数据库表中的一行中,所以需要对各行进行解析。又因为各行数据格式并不一致,所以需要分立地对数据进行解析,因此最好的方法是使用正则表达式来分离数据。例如使用:Pattern.matches("[PTI]+",rec[0])来匹配以PTI三字母之一开头的字串。
写库:将文件从数据库中读出,输出到文件中去。
FileWriter fw = new FileWriter(newFile(fileName));
fw.write(getStationFromDb());
2. 处理(数据的CURD操作)
处理部分是对数据库进行CURD操作,这部分牵涉到质量控制部分,以后才会有更深入的使用。这里只是讲述下使用的一般方法,类似与上文读取,写入内容,数据库操作方法为:
新建数据库连接类,单例模式下返回数据库连接对象:getInstance()函数返回连接对象。单例模式如下:
public static Connection getInstance(){
if (conn == null) {
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url ="jdbc:sqlserver://localhost:1433;databaseName=weather";
try {
conn = DriverManager.getConnection(url,"ThisIsAUserName","ThisIsAPassword");
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} else {
return conn;
}
return conn;
}
在操作中使用PreparedStatement对数据进行读写操作。
PreparedStatement pstmt = this.conn.prepareStatement("INSERT INTOtest (?)");
pstmt.setString(1,info[0]);
status= pstmt.executeUpdate();
3. 生产(从数据库生产处符合质量控制的数据)
生产就是把数据从数据库中读出,新建一个文本文件。这个过程比较简单,读取使用CUDR操作,生成文件使用:
FileWriter fw =new FileWriter(new File(fileName));
fw.write(getStationFromDb());
fw.flush();
fw.close();
需要思考的是,上文解析时使用的正则表达式,能不能在这里使用,缩短开发步骤呢。
大体上的流程处理功能,在这个基础上就已经可以使用了。但是效率问题,架构何不合理、代码规不规范这里都没有考虑。所以下一步还是要从架构和设计上重新思考。
参考: