`

将数据库字段转换成设计文档所需的字段

阅读更多
        哈哈,出差这么久终于回来了,回家的感觉真好!
        PowerDesigner的物理数据库一出来,设计文档中要改的字段就多得不计其数,如果要把PowerDesigner中的字段一个个Copy到设计文档中,那将会是一件非常痛苦的事情。于是我在项目中自己写了一个把从PowerDesigner的物理数据库中复制出来的字段转换成设计文档中所需要的字段名称,用来提高修改文档的工作效率。
        把代码发上来与大家分享一下,我不太会写正则表达式,所以效率也不是很高,希望大家可以帮我完善一下代码,看看正则表达式要怎样写效率才是最高的。
        因为涉及到我们的项目,所以对str.txt文件中数据库的字段进行了必要的屏蔽,希望大家可以谅解。

/*
 * @(#)FileToStr.java  2010-4-28
 * 
 * Copyright 2010 BianJing,All rights reserved.
 */
package test;

import java.io.BufferedReader;

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 读取文本文件,将其内容转换成字符串,并用正则表达式替换获取指定的字符串。
 * 该类在这里主要是对PowerDesigner或数据库中复制出来字符串进行匹配,将每行中的表字段提取出来
 * 并转换成对应的字段名称或字段类型,用于编写设计文档等工作,以提高工作效率。
 * 如:从PowerDesigner复制出来的一行字符串是"某某编码  XX_TYPE_CODE NVARCHAR2(64)",则
 * 转换后得到的字符串是"xxTypeCode"。
 * 注意:在你要用到的字符串之前的字符串中不能包含有英文字符,如果有应将其删除,
 * 如:"某某ID XX_ID NVARCHAR2(32)",这里需要用到的字符串是"XX_ID",所以应将"XX_ID"之前
 * 的字符串"某某ID"中包含的英文("ID")删除或者将整个"某某ID"删除。
 * 
 * @author BianJing<br/>
 *         E-mail: vipbooks@163.com
 * @version  2010-4-28
 */
public class FileToStr {
    // 模式一
    private static Pattern p1 = Pattern.compile("([\\w])([\\w]+)");
    // 模式二
    private static Pattern p2 = Pattern.compile("(.*)_([a-z])(.*)");
    
	// 测试
	public static void main(String[] args) {
	    String str = fileToStr("test/str.txt");
	    
		System.out.println(str);
	}
	/**
	 * 将文本文件转换成字符串
	 * @param filePath 文本文件完整的包路径
	 * @return 文本文件的字符表示形式
	 */
	public static String fileToStr(String filePath){
		StringBuffer fileStr = null;
		Reader reader = null;
		BufferedReader bufReader = null;
		try {
			String realPath = getRealPath(filePath);
			// 将文本文件封装到IO字符流中
			reader = new FileReader(realPath);
			bufReader = new BufferedReader(reader);
			
			String str = null;
			fileStr = new StringBuffer();
			// 读取文本文件
			while ((str = bufReader.readLine()) != null) {
			    // 查找与模式一相匹配的字符串
			    Matcher m1 = p1.matcher(str);
			    if (m1.find()) {
			        // 将查找到的第一组字符串转换成小字字母,如果首字母要大写则这里就不要调 toLowerCase()
	                String tempStr1 = m1.group(1).toLowerCase();
	                // 将查找到的第二组字符串转换成小字字母
	                String tempStr2 = m1.group(2).toLowerCase();
	                
	                str = tempStr1 + tempStr2;
                }
			    
			    str = transform(str);
			        
				fileStr.append(str);
				fileStr.append("\n");
			}
		} catch(NullPointerException e){
			System.out.println("路径[" + filePath + "]无效!");
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if(bufReader != null){
				try {
					bufReader.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
				bufReader = null;
			}
			if(reader != null){
				try {
					reader.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
				reader = null;
			}
		}
		
		if(fileStr != null)
			return fileStr.toString();
		else
			return null;
	}
	/**
	 * 返回文本文件的真实物理路径
	 * @param filePath 文本文件完整的包路径
	 * @return 文本文件的物理路径
	 * @throws NullPointerException
	 */
	private static String getRealPath(String filePath) throws NullPointerException{
		String realPath = FileToStr.class.getClassLoader().getResource(filePath).getFile();
		realPath = realPath.replaceFirst("/", "");
		// 如果URL地址中含有空格,则空格会被"%20"替换,所以要将它替换回来
		realPath = realPath.replaceAll("%20", " ");
		
		return realPath;
	}
	/**
	 * 查找与模式二相匹配的字符串,并将得到的字符串进行组合
	 * @param str
	 * @return str
	 */
	private static String transform(String str){
        // 查找与模式二相匹配的字符串
        Matcher m2 = p2.matcher(str);
        
        if (m2.find()) {
            String tempStr1 = transform(m2.group(1));
            String tempStr2 = transform(m2.group(2));
            String tempStr3 = transform(m2.group(3));
            
            str = tempStr1 + tempStr2.toUpperCase() + tempStr3;
        }
        
        return str;
	}
}


str.txt文件的内容:

某某编码  XX_TYPE_CODE    NVARCHAR2(64)   64      FALSE   FALSE   TRUE
某某名称    XX_NAME NVARCHAR2(64)   64      FALSE   FALSE   TRUE
某某序号    XX_NO   NUMBER(4)   4       FALSE   FALSE   TRUE
某某类型    XX_TYPE_CODE NVARCHAR2(64)   64      FALSE   FALSE   FALSE
某某信息    XX_INFO    NVARCHAR2(200)  200     FALSE   FALSE   FALSE
某某标签    XX_LABEL   NVARCHAR2(200)  200     FALSE   FALSE   FALSE
高度  HEIGHT  NUMBER(5,2) 5   2   FALSE   FALSE   TRUE
宽度  WIDTH   NUMBER(5,2) 5   2   FALSE   FALSE   FALSE
深度  DEPTH   NUMBER(5,2) 5   2   FALSE   FALSE   FALSE
某某方式    XX_WAY_CODE    NVARCHAR2(64)   64      FALSE   FALSE   FALSE
位置    POSITION    NVARCHAR2(200)  200     FALSE   FALSE   FALSE
某某图形  XX_IMAGE    NVARCHAR2(200)  200     FALSE   FALSE   FALSE
某某原因    XX_REASON  NVARCHAR2(200)  200     FALSE   FALSE   FALSE
备注  REMARK  NVARCHAR2(1000) 1000        FALSE   FALSE   FALSE
分享到:
评论

相关推荐

    软件数据库设计模板.docx

    数据库环境说明 描述本设计需采用的数据库系统,设计工具,编程工具以及配置等 逻辑结构设计 数据库设计人员根据需求文档,创建与数据库相关的那部分实体关系图软件数据库设计模板全文共6页,当前为第5页。...

    数据库课程设计设计指导书-最新.pdf

    本课程设计内容与要求 掌握数据库的设计的每个步骤,以及提交各步骤所需图表和文档。通过使用目前流行的 DBMS(首选 SQL SERVER 2005,不得使用 ACCESS) ,建立所设计的数据库,并在此基础 上实现数据库查询、连接等...

    保险-数据库课程设计---副本.doc

    课程设计提交的具体内容:课程设计文档(每人一份打印稿+电子档,文件命名规则: 学号+姓名,如"080310618唐永.doc")、课程设计数据库文件(文件命名规则:学号+ 姓名)。由课代表将所有打印稿和电子档(每班刻一张...

    《数据库原理》课程设计任务书.doc

    4、数据库物理结构设计 以表格的形式列出各张表,包括字段名称、中文含义、数据类型、长度、完整性约束 、索引定义、字段说明; 5、数据库实施 (1)使用T-SQL语句实现数据库表; (2)使用T-SQL语句创建必要索引;...

    数据库设计的性能与效率.docx

    任何类型的数据表,字段空间应当本着足够用,不浪费的原则,数值类型的字段取值范围见下表: 数据库设计的性能与效率全文共6页,当前为第1页。 字段类型 存储空间(b) UNSIGNED 取值范围 tinyint 1 否 -128~127 是 0~...

    数据库教学管理系统系统设计.doc

    试描述将ER图转换为关系模式的一般规则。(5分) 2. 针对撰写设计文档中遇到的问题阐述心得体会。(5分) 实验原理和步骤: 利用数据库设计的4个阶段:需求分析(分析用户要求)、概念设计(信息分析和定义) 、...

    数据库sql图书管理系统.doc

    借阅信息,借阅编号,图书编号,读者编号,借阅日期,应还日期 三、E----R图设计(概念结构设计) 图书信息ER图 借阅信息ER图 读者信息ER图 将局部ER图合并、转换成全局ER图,完成概念模型的设计 全局ER图 四、设计...

    简单数据库设计实例.doc

    请你设计一个数据库,并确定要满足的各种约束,使得其中: 保存了所需的所有信息; 支持教学管理的各种应用; 尽可能地优化:减少冗余、提高查询速度。 画实体-联系图。 将实体-联系图转换为关系表。 2. 参考设计 ...

    玩具出租数据库设计.doc

    2.1概念模型设计 三、数据库的逻辑结构设计 3.1对以上的E-R图所需的实体的几个关键表的设计如下: 表名:一般用户 "字段名 "编号 "办理时间 "经办人 " "类型 "整型 "时间 "字符型 " "长度 "4 "8 "10 " "约束 "主键 ...

    arcgis工具

    如:“AREA”,如果查询的是个人地理数据库数据,则需要将字段名包含在方括号内,如:[AREA],如果查询的是ArcSDE地理数据库数据或是ArcIMS要素类或ArcIMS影象服务子层中的数据,则不需要将字段名括起,如:AREA ...

    人力资源管理系统数据库.doc

    人力资源管理系统的数据库设计与实现 组成员及所完成的工作: 周宇晴所完成工作:ER图的绘制,数据库的物理设计, 数据库上机实现,数据库中数据的装载 张雨薇所完成工作:ER图的绘制,ER图到关系模式的转换,数据库上机...

    数据库考勤管理系统.doc

    数据库需求分析 根据数据流程,可以列出以下管理系统所需的数据项和数据结构. 出勤记录:记录号、员工、出入情况和出入时间. 月度考勤统计:记录号、员工、年月、累计正常工作时间、累计请假时间、累计加班 时间、累加...

    数据库考勤管理系统(1).doc

    数据库需求分析 根据数据流程,可以列出以下管理系统所需的数据项和数据结构。 出勤记录:记录号、员工、出入情况和出入时间。 月度考勤统计:记录号、员工、年月、累计正常工作时间、累计请假时间、累计加班 时间、...

    软件资料文档标准规格

     ◇ 项目开发计划:为软件项目实施方案制订出具体计划,应该包括各部分工作的负责人员、开发的进度、开发经费的预算、所需的硬件及软件资源等。  ◇ 软件需求说明书(软件规格说明书):对所开发软件的功能、性能...

    培训中心信息管理系统-数据库.doc

    " "3设计任务 " "通过分析系统的需求,找到要实现的功能以及如何实现功能,画出对应的实体联系图(" "E-R图),由实体联系图转换为关系模式,创建数据库,建立对应的基本表,指定基本 " "表中字段的类型以及表与表...

    小型企业管理信息系统后台数据库建设.doc

    2 数据库逻辑设计 2.1 把概念模型转换为关系表 这里goods实体和parts实体之间存在多对多的关系,于是需要新创建产品零件配置表go odpart,该表包含两个字段:good_id,p_id;此外workshop和parts之间也存在多对多 ...

    《管理信息系统》——数据库操作和数据分析.doc

    然后将绘制的E-R图转换" "为相应的关系模型,并保证其规范化。 " "建立表之间的关系(表间关系实施参照完整性、级联更新相关字段、级联删除相关记录" "),填入相应的信息。 " "根据数据库中供应商关系和产品关系,...

    Java课程设计报告报告-----飞机航班管理系统.doc

    如果数据库检索到所需信息,则生成列表显示检索结构,如果没有所需信息 ,则页面列表中显示为空。 若要查询飞机航班信息,点击查询菜单项则进入飞机航班信息检索界面,在此界面的检 索方式中选择要检索的数据属性,...

    vf学生公寓管理系统 信息与计算科学的课程设计

    通过此系统,后勤人员可以对学生公寓的各项情况实行电脑化管理,以提高工作效率,也使得公寓管理所需的各项信息能方便快速进行录入,查询,删除和更新。 面对学生公寓管理工作的特点以及该管理工作的具体问题, 本...

    haivDb4J2ee1.3

     二、配置HaivDb4J2ee所需的工程模板,主要有增删改模板和查询模板。本步骤可以自行配置,也可联系作者进行配置。  三、数据库设计人员设计数据库结构,建议对所有表和列增加注释(对注释的利用是本工具的亮点之一...

Global site tag (gtag.js) - Google Analytics