日期:2014-05-16  浏览次数:20345 次

QX项目实战-3.读取数据、数据写入数据库、读出数据生成新文件

上篇文章记录了配置文件的读写,属于系统功能的模块。而预处理、处理以及生产部分的实验,在本文章进行总结。

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();

需要思考的是,上文解析时使用的正则表达式,能不能在这里使用,缩短开发步骤呢。

大体上的流程处理功能,在这个基础上就已经可以使用了。但是效率问题,架构何不合理、代码规不规范这里都没有考虑。所以下一步还是要从架构和设计上重新思考。

参考:

1.      QX项目实战-1.需求分析

2.      QX项目实战-2.模块分类以及配置读取