- 浏览: 49375 次
最新评论
-
ljf_home:
想法很不错。
一个云计算的构想 -
lizhi:
Libcloud 可以实现类似功能
一个云计算的构想 -
highill:
浏览器的兼容性问题和性能问题 需要很长时间来解决,中间有很多 ...
强大的HTML5 -
9310974aa:
非常感谢楼主!~~~
J2ME手机编程心得(四) -
longphoenix:
yangyi 写道互联网将更有用了,但是将更不安全了
确实啊 ...
强大的HTML5
定义好规则和配置格式,就可以开始动手写代码了,首先,需要两个class来保存表的信息和字段信息,还需要从表的xml文件中提取出表的信息,代码如下:
Field.java
package com.bang.dev.autocoder;
public class Field {
private String fieldLabel; //字段标签
private String fieldComment; //注释
private String fieldName; //字段名
private String fieldClassName; //转换以后的java类名
private String fieldType; //字段类型
private String fieldClassType; //转换以后的java类型
private int fieldLen; //字段长度
private int fieldNull; //字段空标志
private boolean readOnly; //只读标志
private String fieldFormType; //保留,表单类型
private String fieldSeq; //序列
private String defaultValue; //默认值
public String getDefaultValue() {
return defaultValue;
}
public void setDefaultValue(String defaultValue) {
this.defaultValue = defaultValue;
}
public void setFieldType(String fieldType) {
this.fieldType = fieldType;
}
public void setFieldName(String fieldName) {
this.fieldName = fieldName;
}
public void setFieldLen(int fieldLen) {
this.fieldLen = fieldLen;
}
public void setFieldNull(int fieldNull) {
this.fieldNull = fieldNull;
}
public void setReadOnly(boolean readOnly) {
this.readOnly = readOnly;
}
public int getFieldLen() {
return fieldLen;
}
public String getFieldName() {
return fieldName;
}
public String getFieldType() {
return fieldType;
}
public int getFieldNull() {
return fieldNull;
}
public boolean isReadOnly() {
return readOnly;
}
public String getFieldClassName() {
return fieldClassName;
}
public void setFieldClassName(String fieldClassName) {
this.fieldClassName = fieldClassName;
}
public String getFieldClassType() {
return fieldClassType;
}
public String getFieldLabel() {
return fieldLabel;
}
public String getFieldFormType() {
return fieldFormType;
}
public String getFieldSeq() {
return fieldSeq;
}
public void setFieldClassType(String fieldClassType) {
this.fieldClassType = fieldClassType;
}
public void setFieldLabel(String fieldLabel) {
this.fieldLabel = fieldLabel;
}
public void setFieldFormType(String fieldFormType) {
this.fieldFormType = fieldFormType;
}
public void setFieldSeq(String fieldSeq) {
this.fieldSeq = fieldSeq;
}
public String getFieldComment() {
return fieldComment;
}
public void setFieldComment(String fieldComment) {
this.fieldComment = fieldComment;
}
}
Table.java
package com.bang.dev.autocoder;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import com.infinitouch.xiaowei.autocode.Field;
public class Table {
private String tableName;
private String tableClassName;
private String tableShortName;
private ArrayList tableFields;
private ArrayList primaryKeys;
private String display;
public String getDisplay() {
return display;
}
public void setDisplay(String display) {
this.display = display;
}
public ArrayList getPrimaryKeys() {
return primaryKeys;
}
public void setPrimaryKeys(ArrayList primaryKeys) {
this.primaryKeys = primaryKeys;
}
public String getTableClassName() {
return tableClassName;
}
public void setTableClassName(String tableClassName) {
this.tableClassName = tableClassName;
}
public ArrayList getTableFields() {
return tableFields;
}
public void setTableFields(ArrayList tableFields) {
this.tableFields = tableFields;
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public String getTableShortName() {
return tableShortName;
}
public void setTableShortName(String tableShortName) {
this.tableShortName = tableShortName;
}
public static Table parse(String fileName)throws Exception
{
Table t = new Table();
ArrayList fieldList = new ArrayList();
HashMap fieldMap = new HashMap();
ArrayList pkList = new ArrayList();
SAXBuilder sb = new SAXBuilder(); //建立构造器
DataInputStream in = new DataInputStream(new FileInputStream(fileName));
Document doc = sb.build(in); //读入stream流
Element root = doc.getRootElement(); //获得根节点
Element fields = root.getChild("fields");
List list = fields.getChildren();
for(int i=0;i<list.size();i++)
{
Element e = (Element)list.get(i);
Field f = new Field();
f.setFieldClassName(e.getChild("class-name").getText());
f.setFieldName(e.getChild("name").getText());
f.setFieldClassType(e.getChild("class-type").getText());
f.setFieldFormType(e.getChild("form-type").getText());
f.setFieldLabel(e.getChild("label").getText());
f.setFieldLen(Integer.parseInt(e.getChild("length").getText()));
f.setFieldNull(Integer.parseInt(e.getChild("null").getText()));
f.setFieldType(e.getChild("type").getText());
f.setReadOnly(Boolean.getBoolean(e.getChild("readonly").getText()));
if(e.getChild("default") != null)
f.setDefaultValue(e.getChild("default").getText());
else
f.setDefaultValue("");
if(e.getChild("seq") != null)
f.setFieldSeq(e.getChild("seq").getText());
else
f.setFieldSeq("");
if(e.getChild("comment") != null)
f.setFieldComment(e.getChild("comment").getText());
else
f.setFieldComment(e.getChild("label").getText());//默认以label作为注释
fieldList.add(f);
fieldMap.put(f.getFieldName(),f);
}
Element pks = root.getChild("pks");
list = pks.getChildren();
for(int i=0;i<list.size();i++)
{
Element e = (Element)list.get(i);
String name = e.getChild("name").getText();
pkList.add(fieldMap.get(name));
}
Element name = root.getChild("name");
t.setTableName(name.getText());
Element class_name = root.getChild("class-name");
t.setTableClassName(class_name.getText());
Element short_name = root.getChild("short-name");
t.setTableShortName(short_name.getText());
Element display = root.getChild("display");
t.setDisplay(display.getText());
//设置主键
t.setPrimaryKeys(pkList);
//设置表字段
t.setTableFields(fieldList);
return t;
}
}
另外需要保存读取进来的配置文件的class,代码如下:
AutoCoderConfig.java
package com.bang.dev.autocoder;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.util.List;
import java.util.Vector;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
public class AutoCoderConfig {
private String saveToPath; //生成代码的保存路径
private String tableFileName; //读取表名的文件
private String dbDriver; //数据库驱动
private String dbUrl; //数据库URL
private String dbUsername; //数据库用户名
private String dbPassword; //数据库密码
private Vector tmpVector;
private Vector otherClass;
private boolean dbFlag;
public boolean isDbFlag() {
return dbFlag;
}
public void setDbFlag(boolean dbFlag) {
this.dbFlag = dbFlag;
}
public String getDbDriver() {
return dbDriver;
}
public void setDbDriver(String dbDriver) {
this.dbDriver = dbDriver;
}
public String getDbPassword() {
return dbPassword;
}
public void setDbPassword(String dbPassword) {
this.dbPassword = dbPassword;
}
public String getDbUrl() {
return dbUrl;
}
public void setDbUrl(String dbUrl) {
this.dbUrl = dbUrl;
}
public String getDbUsername() {
return dbUsername;
}
public void setDbUsername(String dbUsername) {
this.dbUsername = dbUsername;
}
public Vector getOtherClass() {
return otherClass;
}
public void setOtherClass(Vector otherClass) {
this.otherClass = otherClass;
}
public String getSaveToPath() {
return saveToPath;
}
public void setSaveToPath(String saveToPath) {
this.saveToPath = saveToPath;
}
public String getTableFileName() {
return tableFileName;
}
public void setTableFileName(String tableFileName) {
this.tableFileName = tableFileName;
}
public Vector getTmpVector() {
return tmpVector;
}
public void setTmpVector(Vector tmpVector) {
this.tmpVector = tmpVector;
}
public static AutoCoderConfig readConfig(String name) throws Exception {
AutoCoderConfig config = new AutoCoderConfig();
SAXBuilder sb = new SAXBuilder(); //建立构造器
DataInputStream in = new DataInputStream(new FileInputStream(
name));
Document doc = sb.build(in); //读入stream流
Element root = doc.getRootElement(); //获得根节点
Element file_path = root.getChild("file-path");
config.saveToPath = file_path.getText();
Element table_file = root.getChild("table-file");
config.tableFileName = table_file.getText();
//数据库配置
Element db_element = root.getChild(
发表评论
-
强大的HTML5
2010-02-23 09:50 2258前些天看了一些HTML5方面的资料,感觉 ... -
网站安全不可忽视--一个收费网站的破解过程
2004-10-07 09:23 1168某日在网上偶然打开一个网站,是有PLMM与你视频聊天的,但是要 ... -
教你用VC6做QQ对对碰外挂程序
2005-02-26 14:45 1081前段时间跟以前的同事玩QQ游戏对对碰,结果输的 ... -
用VC实现发送和接受短信
2005-04-14 01:48 3160前些日子感觉得练习一下VC了,所以就有想,平时发短信那 ... -
J2ME手机编程心得(一)
2006-01-18 09:05 898自学J2ME也有一段时间了,总觉得应该把自己学习的心得与 ... -
J2ME手机编程心得(二)
2006-01-18 09:06 1110J2ME的环境配置好了,现在就开始写我们的第一个J2ME的 ... -
J2ME手机编程心得(四)
2006-01-18 09:07 1514上一个贪吃蛇的游 ... -
J2ME手机编程心得(三)
2006-01-18 09:07 1187上一次已经做完了第一个简单的J2ME程序,但是可能大家最 ... -
Weblogic9.0的破解方法
2006-01-18 09:09 1153weblogic9已经出来了,在官方网站可以下载到试用版 ... -
利用J2ME制作你自己的网络相册
2006-01-21 11:52 1031现在越来越多的手机都支持拍照功能,但是各种型号的手机 ... -
Spring的IOC在J2EE项目中的应用
2006-03-06 17:28 1153前些天大概学习了一下Spring的IOC,感觉还是很方便的 ... -
自做代码生成器(一)介绍
2006-08-03 18:43 1137对数据库的操作中间,不同的地方无非是各个字段的信息,比如 ... -
自做代码生成器(二)规则格式定义
2006-08-03 18:45 1581首先是数据表和java类之间的转换规则,数据库以orac ... -
自做代码生成器(四)举例实践
2006-08-03 18:47 1327我们先定义一个数据表的xml文件,比如系统用户的表sys ... -
OpenLaszlo在Resin上的部署以及开发
2007-07-04 18:00 1134早就关注过OpenLaszlo这个 ... -
resin3.1处理utf-8格式的jsp时存在的问题
2008-11-05 16:48 6438以前一直使用resin-3.0.x作为服务器,最近想升 ... -
一个网站性能的问题,寻求帮助!
2008-06-27 16:40 2532网站是一个wap站点,负责将用户访问的web站点的页面转换成为 ... -
一个数据层的设计与实现,大伙帮忙看看是否可行,谢谢!
2007-04-20 20:17 4106这里我没有使用Hibernate,我一直都嫌Hiber ...
相关推荐
STM8代码生成器是专为STM8微控制器设计的一款工具,它简化了开发过程,帮助初学者快速构建和编写代码,无需从头开始手动编写底层驱动程序。 STM8代码生成器的主要功能包括: 1. **自动生成初始化代码**:此工具...
《自己动手写编译器、链接器》是王俊博先生的一本经典著作,它深入浅出地介绍了编译器和链接器的工作原理,并提供了完整的源代码,让读者能够亲手实践编译器与链接器的构建过程。这本书是学习计算机系统底层知识的...
《自己动手写编译器链接器》是一本深入解析编译器与链接器工作原理的教程,通过PDF文档和源码实例,为读者提供了一条亲手构建这些关键工具的实践之路。编译器和链接器是软件开发过程中的重要组成部分,它们在程序的...
在编译原理中,"编译方法实验-扫描器和中间代码生成器的实现"是一个重要的实践环节,它涵盖了编译器设计的核心组成部分。在这个实验中,学生将深入理解两次编译过程,并动手实现关键的编译器组件。 首先,我们来...
根据提供的文件信息,本文将围绕“自己动手写编译器链接器”的主题展开,深入探讨编译器与链接器的基本概念、工作原理及其在实际编程中的应用。 ### 编译器的基本概念 编译器是一种计算机程序,它将一种编程语言...
**C#简单代码生成器** 是一款面向C#初学者的工具,旨在简化代码编写过程,提高开发效率。它利用程序自动化生成常见的代码结构,帮助开发者快速构建基础框架,从而有更多时间专注于业务逻辑和创新功能。这款工具包含...
《自己动手写编译器》是一本面向编程爱好者和IT专业人士的书籍,旨在引导读者深入理解编译器和链接器的工作原理。通过亲手构建一个简单的编译器,读者可以掌握编译器设计与实现的核心技术,提升软件开发的深度认识。...
4. **中间代码生成器(Code Generator)**:将AST转换为中间代码,如三地址码或字节码。这一步可以使得优化更容易实现。 5. **优化器(Optimizer)**:对中间代码进行优化,以提高生成代码的运行效率。优化可能包括...
《自己动手写编译器、链接器》这本书是IT领域中关于编译技术的经典之作,旨在帮助读者深入理解编译器和链接器的工作原理。通过阅读这本书,你可以了解到从源代码到可执行程序的全过程,这包括词法分析、语法分析、...
《自己动手写编译器链接器》是一本深入探讨编译器和链接器实现的书籍,对于想要深入了解计算机系统、编程语言以及软件工程的人来说,它提供了宝贵的实践指导。该书旨在帮助读者理解编译器和链接器的工作原理,并通过...
本书介绍的SCC编译器没有借助Lex与 Yacc这些编译 器自动生成工具纯手工编写而成更便于学习和理解。为了生成可以直接运行EXE文件本书还实现了 一个链接器。读完本书读者将知道一门全新的语言如何定义一个真实的编译器...
在这个资料包中,你将找到关于如何动手编写MIPS处理器的相关资源和源代码,这对于理解计算机硬件工作原理和深入学习数字逻辑设计非常有帮助。 首先,我们要了解MIPS的基本结构。MIPS架构通常包含五个主要部分:指令...
4. 编写代码生成器,将三地址码转换为目标机器码。 在压缩包中的"san"文件可能包含了实验的源代码、数据文件或者编译后的可执行文件。为了运行和理解这个实验,你需要查看源代码,了解其实现细节,并在Turbo C或...
《自己动手写编译器链接器》是一本深入解析编译器与链接器工作原理的实践教程。通过阅读这本书的源码,读者可以深入了解这两者的内部机制,这对于计算机科学和软件工程领域的专业人士来说是非常有价值的。下面我们将...
"逐步指导您掌握动软.NET代码生成器的使用,通过全程可视化操作与实战示例,快速学会利用该工具自动生成三层架构的项目代码。"。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信...
6. **中间代码生成**:编译器通常会生成一种与特定硬件无关的中间代码,如三地址码或抽象语法树,便于后续的优化和目标代码生成。 7. **代码优化**:在不影响程序语义的前提下,改进代码的运行效率,如删除冗余计算...
编译器是计算机科学中的重要组成部分,它负责将高级编程语言转换为机器可理解的指令。...通过这个C++版的编译器与编译器生成器资源,你可以深入探究这些主题,增强对编译原理的理解,甚至动手构建自己的编译工具。
《自己动手写编译器 两本》这套资料包含了《自己动手构造编译系统++编译、汇编与链接》和《自己动手写编译器链接器》两本书,是学习编译原理和技术的宝贵资源。这两本书深入浅出地介绍了编译器的设计与实现过程,...
- **代码生成器的编写**:最终,通过编写代码生成器,实现枚举类型的自动创建。这部分内容对于理解如何根据用户输入生成Java代码具有重要意义。 ##### 3. 插件开发导航 - **SWT/JFace基础**:SWT和JFace是Eclipse ...