`
vipbooks
  • 浏览: 155261 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类

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

阅读更多
        哈哈,出差这么久终于回来了,回家的感觉真好!
        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
分享到:
评论

相关推荐

    数据库设计文档一键生成工具(支持多数据源).zip

    综上所述,“数据库设计文档一键生成工具(支持多数据源)”是一款高效实用的工具,它简化了数据库设计文档的创建流程,提高了团队协作的效率,同时降低了错误率。对于需要处理复杂多变数据库环境的开发者和DBA来说,...

    数据库设计文档.pdf

    数据库设计文档是软件开发过程中至关重要的一个环节,它详尽地描述了数据库的结构、功能以及权限分配。以下是对这份报告中的关键知识点的详细说明: 1. **文档介绍**: - **文档目的**:通常是为了提供数据库设计...

    数据库设计文档转sql脚本

    标题“数据库设计文档转sql脚本”暗示了我们讨论的是一个工具或程序,它的功能是将描述数据库结构的文档(可能是Excel表格或其他格式)转换成创建和操作数据库所需的SQL语句。这种转换通常包括解析文档,识别表结构...

    数据库课程设计 包括源代码 word文档

    逻辑设计则将E-R模型转换为关系模式,选择合适的字段类型和约束。最后,物理设计考虑如何在特定DBMS上最有效地存储和访问数据。 在实现阶段,我们将使用SQL(结构化查询语言)来创建数据库表、定义数据完整性规则、...

    数据库设计模板.docx

    综上所述,时代集团产品跟踪平台的数据库设计文档详细规定了数据库的各个层面,从命名到物理结构,再到安全性和管理策略,为整个项目的实施提供了清晰的指导。遵循这样的设计规范,能够有效地支持业务流程,提高数据...

    工作流详细设计(word)+数据库设计文档(pdm).rar

    通过这份“工作流详细设计(word)+数据库设计文档(pdm)”的组合,我们可以全面了解烟草公司的工作流程以及支撑这些流程的数据库结构。这对于优化业务流程、提升工作效率、保证数据准确性和一致性都具有重要意义。

    实验室预约系统数据库设计文档

    《实验室预约系统数据库设计文档》全面阐述了构建一个高效、实用的实验室预约系统所需的数据存储与管理策略。在这个系统中,数据库设计是核心部分,它决定了数据的组织方式、访问效率以及系统的整体性能。以下是对...

    oracle数据库设计文档模版

    ### Oracle数据库设计文档模版解析 #### 一、概述 本文档主要介绍了一个关于Oracle数据库设计的模版,特别适用于第二热电厂MIS系统的数据库设计。该文档详细地阐述了数据库设计中的各种实体、对象的命名规则,并给...

    数据库需求设计日报

    “设计文档”是实现需求的蓝图,包括数据库设计文档、接口设计文档等。数据库设计文档阐述了数据模型、索引设计、存储过程和触发器等,而接口设计文档则规定了系统间如何交换数据。 “工作日报”则是项目进度的体现...

    数据库转换工具data_llQ

    通过data_llQ,用户可以直接将数据库中的数据转换成Excel格式,方便进行进一步的数据清洗、分析和可视化。这对于数据分析人员来说,无疑提供了极大的便利,无需再进行复杂的SQL查询或编程操作,就能快速地获取到所需...

    SQLserver数据库开发文档模板

    3. **逻辑数据模型(LDM)**:将CDM转换为更具体的关系模型,包括表、字段、键和索引等。 4. **物理数据模型(PDM)**:考虑SQL Server特定的存储和优化策略,如表分区、索引类型等。 5. **数据字典**:详细列出...

    Sqlite数据库.docx说明文档

    与其他大型数据库管理系统相比,如 MySQL 或 PostgreSQL,SQLite 在资源占用方面有着显著的优势,通常仅需几百 KB 的内存就能运行,这使得它成为移动设备和小型应用的理想选择。 - **跨平台支持**:SQLite 支持多种...

    数据结构设计文档.doc

    以及专门指导和所需的支持软件,如数据库管理系统(DBMS)等。 3. 结构设计 结构设计是数据库设计的核心部分,分为概念结构设计、逻辑结构设计和物理结构设计。 3.1 概念结构设计 这一阶段主要关注业务需求,将...

    数据库课程设计.doc

    - **逻辑结构设计**:基于E-R图转换为具体的数据库表结构,包括字段定义、数据类型、主键、外键等;视图设计用于简化或定制用户数据访问;索引设计提高查询速度;约束条件确保数据完整性。 - **物理结构设计**:...

    mysql或者Oracle通过表注释生成word数据库文档

    例如,你可以编写一个Java程序,连接到数据库,读取所有表的注释,并将这些信息格式化为Word文档所需的格式。 压缩包中的`itext-1.3.1.jar`和`itext-rtf-2.1.7-redhat-1.jar`是iText库的不同版本,这是一个用于创建...

    数据库课程设计

    逻辑结构分析则将E-R模型转换为具体的数据库模式,如关系模型,确保数据的组织符合数据库理论。数据字典记录了所有数据元素的详细信息,是设计过程中的重要参考文档。 3. 数据库操作部分 在实际操作中,数据库的...

    数据库详细设计(样例)

    此外,数据库设计还需考虑数据类型的选择,如整型、字符串、日期时间等,以及字段的长度限制。对于某些字段,可能还需要设置约束条件,如非空、唯一性或检查约束,以满足业务规则。 索引是数据库性能优化的重要手段...

    资产管理数据库设计

    **逻辑结构设计**:基于E-R模型,将实体及其属性转换为数据库中的表结构,定义了各表的字段类型、主键、外键等,确保数据的一致性和完整性。 **物理表结构设计**:进一步细化逻辑结构,考虑到存储效率和查询性能,...

    将关系型数据库MySQL存储数据转换为XML文件的实现

    1. 连接MySQL数据库,执行SQL查询获取所需数据。 2. 遍历查询结果,为每条记录创建对应的XML元素结构。 3. 将字段值填充到XML元素中,构建完整的XML文档结构。 4. 输出XML文件,完成数据转换。 以图2-1所示的...

Global site tag (gtag.js) - Google Analytics