- 浏览: 10846 次
- 性别:
- 来自: 武汉
最近访客 更多访客>>
最新评论
-
278506470:
megarnettzzw 写道278506470 写道hemi ...
一个java web程序员的自述 -
megarnettzzw:
278506470 写道heming_way 写道我觉得你还是 ...
一个java web程序员的自述 -
278506470:
heming_way 写道我觉得你还是改变好,改变才有新的可能 ...
一个java web程序员的自述 -
heming_way:
我觉得你还是改变好,改变才有新的可能,如果对现状不满,为什么不 ...
一个java web程序员的自述 -
mercyblitz:
看个人职业和生活目标。
一个java web程序员的自述
既然提到xml,xml只是临时保存数据信息的,通常保存数据都是使用数据库,我想数据库大家肯定不陌生,而数据库中业务表的字段又和页面中的表单直接关联,当然不同的公司使用不同的框架,也就是利用不同的形式将表单和数据库进行关联。这里我就提供一个简单的读取数据表的结构的信息,供大家参考,也可以给我提一提您的宝贵的意见。
代码如下:
package com.pkusoft.dbtest; /** * * @author HILL * @ 本类作为开发辅助作用 */ public class ColumnInfo { private String[] strsAttribus = {"id","type","class","kind","fieldname","datatype" ,"state","maxlength"} ; private String id ; private String type ; private String strClass ; private String kind ; private String fieldname ; private String datatype ; private String state ; private String maxlength ; private String must ; private String comment ; private String columnName = null ; private String columnValue = null ; private String columnComment = null ; private String columnDatatype = null ; private int columnSize = 0; private boolean colmunIsMust = false ; public ColumnInfo() {} /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub } public boolean isColmunIsMust() { return colmunIsMust; } public void setColmunIsMust(boolean colmunIsMust) { this.colmunIsMust = colmunIsMust; } public String getColumnComment() { return columnComment; } public void setColumnComment(String columnComment) { this.columnComment = columnComment; } public String getColumnDatatype() { return columnDatatype; } public void setColumnDatatype(String columnDatatype) { this.columnDatatype = columnDatatype; } public String getColumnName() { return columnName; } public void setColumnName(String columnName) { this.columnName = columnName; } public int getColumnSize() { return columnSize; } public void setColumnSize(int columnSize) { this.columnSize = columnSize; } public String getColumnValue() { return columnValue; } public void setColumnValue(String columnValue) { this.columnValue = columnValue; } public String getDatatype() { return datatype; } public void setDatatype(String datatype) { this.datatype = datatype; } public String getFieldname() { return fieldname; } public void setFieldname(String fieldname) { this.fieldname = fieldname; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getKind() { return kind; } public void setKind(String kind) { this.kind = kind; } public String getMaxlength() { return maxlength; } public void setMaxlength(String maxlength) { this.maxlength = maxlength; } public String getState() { return state; } public void setState(String state) { this.state = state; } public String getStrClass() { return strClass; } public void setStrClass(String strClass) { this.strClass = strClass; } public String[] getStrsAttribus() { return strsAttribus; } public void setStrsAttribus(String[] strsAttribus) { this.strsAttribus = strsAttribus; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getMust() { return must; } public void setMust(String must) { this.must = must; } public String getComment() { return comment; } public void setComment(String comment) { this.comment = comment; } }
本类是基础的字段信息类。
package com.pkusoft.dbtest; import java.util.Enumeration; import java.util.Hashtable; import java.util.List; import java.util.ArrayList; import java.sql.*; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import java.sql.Types; import com.pkusoft.db.DBConnection; /** * * @author HILL * */ public class TableInfo { private static String xmlContent = "<?xml version='1.0'?><PKUDOC><DATAINFO></DATAINFO></PKUDOC>" ; private static String DATAINFO = "DATAINFO" ; private static String COMMENT = "comment" ; private static String ID = "id" ; private static String TYPE = "type" ; private static String CLASS = "class" ; private static String KIND = "kind" ; private static String FIELDNAME = "fieldname" ; private static String DATATYPE = "datatype" ; private static String STATE = "state" ; private static String MAXLENGTH = "maxlength" ; private String[] strsAttribus = {TableInfo.ID,TableInfo.TYPE,TableInfo.CLASS,TableInfo.KIND,TableInfo.FIELDNAME,TableInfo.DATATYPE ,TableInfo.STATE,TableInfo.MAXLENGTH} ; private Hashtable hDataType = new Hashtable() ; // datatype 的字典翻译 private Hashtable hKind = new Hashtable() ; // kind 的字典翻译 private Hashtable hMust = new Hashtable() ; // must 的字典翻译 private String tableName = null ; // 表的名字 private String tableComment = null ; // 表的注释 private Hashtable hashtable = null ; // 列的详细信息 private List columns = null ; // 列的列表 private String strXML = null ; // 组织的一个xml public String getTableName() { return this.tableName ; } public String getTableComment() { return this.tableComment ; } public Hashtable getColumnInfo() { return this.hashtable ; } public List getColumns() { return this.columns ; } public String getXML() { return strXML; } TableInfo(String strTalbeName){ try { init(strTalbeName) ; } catch (Exception e) { e.printStackTrace(); } } private void init(String strTableName)throws Exception{ strTableName = strTableName.toUpperCase() ; this.tableName = strTableName ; hDataType.put(String.valueOf(Types.VARCHAR) ,"0") ; //VARCHAR2 12 hDataType.put(String.valueOf(Types.CHAR) ,"0") ; //CHAR 1 hDataType.put(String.valueOf(Types.NUMERIC) ,"1") ; //NUMBER 2 hDataType.put(String.valueOf(Types.DATE) ,"3") ; //DATE 91 hDataType.put(String.valueOf(Types.BLOB) ,"5") ; //BLOB 2004 hKind.put(String.valueOf(Types.VARCHAR) ,"text") ; //VARCHAR2 12 hKind.put(String.valueOf(Types.CHAR) ,"text") ; //CHAR 1 hKind.put(String.valueOf(Types.NUMERIC) ,"int") ; //NUMBER 2 hKind.put(String.valueOf(Types.DATE) ,"date") ; //DATE 91 hKind.put(String.valueOf(Types.BLOB) ,"text") ; //BLOB 2004 hMust.put("0","true") ; hMust.put("1","false") ; DBConnection dbconn = null ; String strSql = null ; ResultSet rs = null ; ResultSetMetaData rsmd = null ; try { this.columns = new ArrayList() ; this.hashtable = new Hashtable() ; Hashtable commentHtable = this.getColumnCommonList(strTableName) ; strSql = "SELECT * FROM " + strTableName + " WHERE 1=2" ; dbconn = new DBConnection() ; rs = dbconn.excuteQuery(strSql) ; rsmd = rs.getMetaData() ; int colLength = rsmd.getColumnCount() ; for(int i=1;i<=colLength;i++) { ColumnInfo columnInfo = new ColumnInfo() ; String strName = rsmd.getColumnName(i) ; String strType = String.valueOf(rsmd.getColumnType(i)) ; columnInfo.setColumnDatatype(hDataType.get(strType).toString()) ; columnInfo.setColumnComment(commentHtable.get(strName).toString()) ; String isNullAble = String.valueOf(rsmd.isNullable(i)) ; if(isNullAble.equals("0")) columnInfo.setColmunIsMust(true) ; else columnInfo.setColmunIsMust(false) ; int colSize = rsmd.getColumnDisplaySize(i) ; columnInfo.setColumnSize(colSize) ; columnInfo.setColumnName(strName) ; Object[] arrObj = {strName.toLowerCase(),"text","Edit",hKind,strTableName +"/" + strName,hDataType,"0",String.valueOf(colSize)} ; for(int j=0;j<strsAttribus.length;j++) { Object o = arrObj[j] ; String strTempValue = "" ; if(o instanceof String) strTempValue = o.toString() ; else if(o instanceof Hashtable) { Hashtable ho = (Hashtable)o ; strTempValue =ho.get(strType).toString() ; } if(strsAttribus[j].equals(TableInfo.ID)) columnInfo.setId(strName) ; else if(strsAttribus[j].equals(TableInfo.TYPE)) columnInfo.setType(strTempValue) ; else if(strsAttribus[j].equals(TableInfo.CLASS)) columnInfo.setStrClass(strTempValue) ; else if(strsAttribus[j].equals(TableInfo.KIND)) columnInfo.setKind(strTempValue) ; else if(strsAttribus[j].equals(TableInfo.FIELDNAME)) columnInfo.setFieldname(strTempValue) ; else if(strsAttribus[j].equals(TableInfo.DATATYPE)) columnInfo.setDatatype(strTempValue) ; else if(strsAttribus[j].equals(TableInfo.STATE)) columnInfo.setState(strTempValue) ; else if(strsAttribus[j].equals(TableInfo.MAXLENGTH)) columnInfo.setMaxlength(strTempValue) ; } columnInfo.setMust(hMust.get(isNullAble).toString()) ; columnInfo.setComment(commentHtable.get(strName).toString()) ; this.hashtable.put(strName, columnInfo) ; this.columns.add(strName) ; this.strXML = this.organizationXML() ; } this.tableComment = commentHtable.get(strTableName).toString() ; } catch (Exception e) { e.printStackTrace() ; } finally { if(dbconn !=null) dbconn.freeConnection() ; if(rs!=null) rs.close() ; } } private String organizationXML()throws DocumentException{ Document tempDoc = DocumentHelper.parseText(TableInfo.xmlContent) ; Element tabEle = DocumentHelper.createElement(this.getTableName()) ; Hashtable columnHashtable = this.getColumnInfo() ; Enumeration enu = columnHashtable.elements(); while(enu.hasMoreElements()) { ColumnInfo colInfo = (ColumnInfo)enu.nextElement() ; Element colEle = DocumentHelper.createElement(colInfo.getColumnName()) ; colEle.addAttribute(TableInfo.COMMENT, colInfo.getColumnComment()) ; colEle.addAttribute(TableInfo.ID , colInfo.getId().toLowerCase()) ; colEle.addAttribute(TableInfo.TYPE , colInfo.getType()) ; colEle.addAttribute(TableInfo.CLASS , colInfo.getStrClass()) ; colEle.addAttribute(TableInfo.KIND , colInfo.getKind()) ; colEle.addAttribute(TableInfo.FIELDNAME , colInfo.getFieldname()) ; colEle.addAttribute(TableInfo.DATATYPE , colInfo.getColumnDatatype()) ; colEle.addAttribute(TableInfo.STATE , colInfo.getState()) ; colEle.addAttribute(TableInfo.MAXLENGTH , String.valueOf(colInfo.getColumnSize())) ; tabEle.add(colEle) ; } tempDoc.getRootElement().element(TableInfo.DATAINFO).add(tabEle) ; tempDoc.getRootElement().element(TableInfo.DATAINFO).addAttribute(TableInfo.COMMENT, this.getTableComment()) ; return tempDoc.asXML() ; } public java.util.Hashtable getColumnCommonList(String strTableName)throws Exception{ Hashtable commentHashtable = new Hashtable() ; strTableName = strTableName.toUpperCase() ; String strSql = "SELECT * FROM USER_COL_COMMENTS WHERE TABLE_NAME='"+strTableName+"'" ; String strSql1 = "SELECT COMMENTS FROM USER_TAB_COMMENTS WHERE TABLE_NAME='"+strTableName+"'" ; DBConnection dbc = null ; ResultSet rs = null ; try{ dbc = new DBConnection() ; rs = dbc.excuteQuery(strSql) ; while(rs.next()){ String strComment = "" ; if(rs.getObject("COMMENTS") == null) strComment = "" ; else strComment = rs.getObject("COMMENTS").toString() ; commentHashtable.put(rs.getObject("COLUMN_NAME"), strComment) ; } dbc.freeConnection() ; rs.close() ; dbc = new DBConnection() ; rs = dbc.excuteQuery(strSql1) ; if(rs.next()) commentHashtable.put(strTableName, rs.getString("COMMENTS")) ; } catch(Exception e){ e.printStackTrace() ; } finally{ if(dbc!=null) dbc.freeConnection() ; if(rs != null) rs.close() ; } return commentHashtable ; } }
这是一个表的管理类,管理所有的字段,已经对应生成的xml的信息。
package com.pkusoft.dbtest; import java.util.Hashtable; public class TableFactory { public static TableFactory tableFactory = null ; private Hashtable tableList = null ; public static synchronized TableFactory getInstance(){ if(tableFactory == null){} tableFactory = new TableFactory() ; return tableFactory ; } private TableFactory(){ tableList = new Hashtable() ; } public TableInfo getTableInfo(String strTableName){ String tempTableName = strTableName.toUpperCase() ; TableInfo tempTableInfo = null ; if(this.tableList.get(tempTableName) != null) tempTableInfo = (TableInfo)this.tableList.get(tempTableName) ; else{ tempTableInfo = new TableInfo(tempTableName) ; this.tableList.put(tempTableName, tempTableInfo) ; } return tempTableInfo ; } public static void main(String[] args) { TableFactory tabFactory = TableFactory.getInstance() ; TableInfo tabeInfo = tabFactory.getTableInfo("caseinfo") ; System.out.println(tabeInfo.getXML()); } }
这是一个工厂类,保存表的信息,读取一个表只需要一次访问数据库即可,第一次访问了就将数据信息保存到缓存中,第二次,直接从缓存中读取,这个的目的就是利用内存来换取速度。
这个没有提供数据连接的类,如果想测试数据,可以自己写连接测试,以上近作参考。如有疑问,请给我留言。
这里是我生成的xml结构供大家参考——
<?xml version="1.0" encoding="UTF-8"?> <PKUSOFT> <DATAINFO> <CASEINFO> <CTPANONYMOUS comment="匿名报警,对应DIC_YESORNO" id="CTPANONYMOUS" type="text" class="Edit" kind="int" fieldname="CASEINFO/CTPANONYMOUS" datatype="1" state="0" maxlength="22" /> <REPORTMODE comment="报案方式,对应DIC_REPORT_TYPE" id="REPORTMODE" type="text" class="Edit" kind="text" fieldname="CASEINFO/REPORTMODE" datatype="0" state="0" maxlength="2" /> <REPORTERGENDER comment="报案人性别,对应DIC_GENDER" id="REPORTERGENDER" type="text" class="Edit" kind="int" fieldname="CASEINFO/REPORTERGENDER" datatype="1" state="0" maxlength="22" /> <LEGAL2 comment="法制办案人二" id="LEGAL2" type="text" class="Edit" kind="text" fieldname="CASEINFO/LEGAL2" datatype="0" state="0" maxlength="10" /> <CSTATION comment="办案部门市局,对应MANAGEUNIT" id="CSTATION" type="text" class="Edit" kind="text" fieldname="CASEINFO/CSTATION" datatype="0" state="0" maxlength="16" /> <LEGAL1 comment="法制办案人一" id="LEGAL1" type="text" class="Edit" kind="text" fieldname="CASEINFO/LEGAL1" datatype="0" state="0" maxlength="10" /> <REMOVETIME comment="移交时间" id="REMOVETIME" type="text" class="Edit" kind="date" fieldname="CASEINFO/REMOVETIME" datatype="3" state="0" maxlength="7" /> <CTP110 comment="110报警,对应DIC_YESORNO" id="CTP110" type="text" class="Edit" kind="int" fieldname="CASEINFO/CTP110" datatype="1" state="0" maxlength="22" /> <PSTATION comment="办案部门省厅,对应MANAGEUNIT" id="PSTATION" type="text" class="Edit" kind="text" fieldname="CASEINFO/PSTATION" datatype="0" state="0" maxlength="16" /> <LEGALNAME2 comment="法制办案人二姓名" id="LEGALNAME2" type="text" class="Edit" kind="text" fieldname="CASEINFO/LEGALNAME2" datatype="0" state="0" maxlength="60" /> <LEGALNAME1 comment="法制办案人一姓名" id="LEGALNAME1" type="text" class="Edit" kind="text" fieldname="CASEINFO/LEGALNAME1" datatype="0" state="0" maxlength="60" /> <CASEID comment="案件编号" id="CASEID" type="text" class="Edit" kind="text" fieldname="CASEINFO/CASEID" datatype="0" state="0" maxlength="50" /> <REQSTATE comment="待办状态,对应DIC_CASESTATE_REQ" id="REQSTATE" type="text" class="Edit" kind="int" fieldname="CASEINFO/REQSTATE" datatype="1" state="0" maxlength="22" /> <REPORTRADDR2 comment="报案人住址_详址" id="REPORTRADDR2" type="text" class="Edit" kind="text" fieldname="CASEINFO/REPORTRADDR2" datatype="0" state="0" maxlength="120" /> <REPORTRADDR1 comment="报案人住址_门牌号" id="REPORTRADDR1" type="text" class="Edit" kind="text" fieldname="CASEINFO/REPORTRADDR1" datatype="0" state="0" maxlength="120" /> <LEGALDEPT comment="法制办案部门" id="LEGALDEPT" type="text" class="Edit" kind="text" fieldname="CASEINFO/LEGALDEPT" datatype="0" state="0" maxlength="16" /> <LEGALDEPTNAME comment="法制办案部门名称" id="LEGALDEPTNAME" type="text" class="Edit" kind="text" fieldname="CASEINFO/LEGALDEPTNAME" datatype="0" state="0" maxlength="90" /> <REPORTRSECTIONID comment="报案人住址_行政区划" id="REPORTRSECTIONID" type="text" class="Edit" kind="text" fieldname="CASEINFO/REPORTRSECTIONID" datatype="0" state="0" maxlength="6" /> <CASERESOURCEDES comment="案件来源描述" id="CASERESOURCEDES" type="text" class="Edit" kind="text" fieldname="CASEINFO/CASERESOURCEDES" datatype="0" state="0" maxlength="90" /> </CASEINFO> </DATAINFO> </PKUSOFT>
评论
6 楼
278506470
2008-10-16
本组件是在保证你对数据库连接没有问题的情况下可以实现,同时组织xml所使用到的jar包是dom4j,本连接的数据库是oracle。
5 楼
278506470
2008-10-16
yuxingege34 写道
应该知道我是谁了吧???
你是谁啊,怎么是谁给你取得名字,叫“yuxinggegege”很怪呢 ?
你就是班长呗!
4 楼
278506470
2008-10-16
lucky520 写道
师兄是考研我们看代码的能力吗?一句注释都没有,还有看懂了80%,就是组织xml那个方法不是很清楚,下了个dom4j api,在看看吧,自己试一试!期待你在页面部分哦,(*^__^*) 嘻嘻……
页面部分我写的有点复杂了,n多,我还得整理一下。
是啊,从头到尾,我很少写注释哦,昨天晚上赶得急,也就没有写,我下次注意。
3 楼
lucky520
2008-10-16
师兄是考研我们看代码的能力吗?一句注释都没有,还有看懂了80%,就是组织xml那个方法不是很清楚,下了个dom4j api,在看看吧,自己试一试!期待你在页面部分哦,(*^__^*) 嘻嘻……
2 楼
yuxingege34
2008-10-16
应该知道我是谁了吧???
1 楼
yuxingege34
2008-10-16
代码太长,没勇气看完~~~
发表评论
-
一个java web程序员的自述
2010-06-24 18:48 1293刚刚看了一篇(转)毕业后的五年拉开大家差距的原因,思绪蛮多! ... -
oracle 随机查询
2009-10-11 14:04 1165【1】方法一:通过dbms_random.random ... -
CSS滤镜——Filter
2009-06-30 14:45 1020查看文章 CSS滤镜——F ... -
和alert()说再见
2008-10-17 22:59 2713今天网上随便了溜达了一圈,发现了一个很好的javascri ... -
网页中显示xml
2008-10-14 23:17 2321如果想在网页中显示xml的完整结构,直接输出,IE会把xm ...
相关推荐
特点1: 在给定的基准值情况下回生成固定密码 特点2: 在不给定基准值情况下可随机生成密码 特点3: 可自由设置生成密码长度,可设置生成密码包含的字符类型(大小写字母,数字,特殊字符),且字符类型可设置长度
所以自己写了一个用宏生成ftp脚本下载后,更新的模块,导入即可使用,非常方便。 自动升级模块我做成了ftp服务器的模式,在ftp上面放了一个ver.txt里面第一行版本号,第二行更新日期,第三行开始可以写一些注释或者...
4. 当发热陶瓷芯接触到固定轮组件的卷绕部时,第一浮动轮组件和其次浮动轮组件在弹力组件的作用下回位,发热陶瓷芯隔着棉布与各卷绕部接触。 5. 固定轮组件、第一浮动轮组件和其次浮动轮组件的卷绕部旋转,棉布因...
关于tile的命名和获取方法,待下回分解。 3、在Google服务经常被block的今天,离线包和离线地图,还是非常有必要的。:) 使用方法:解压缩到一个web服务器目录下,通过浏览器地址直接访问map-simple.html和maptype-...
例如,如果一个项目同时包含了A授权和B授权的组件,你需要遵循这两个许可证的所有条款,确保在使用、修改和发布时符合各自的要求。 在开源社区中,AB授权通常意味着软件的开放性和灵活性。开发者可以利用这些代码来...
第一次写的资源文章: 我目前是小白,初出茅庐原生写法,相互学习,共同进步! 小弟虚心求教,大神勿喷请多多指点赐教; ... 1.1分别定义了全局和缓存了头像临时Url(因为毕竟是临时链接,...请看下回分解,感谢支持!
近距离煤层一般选用下行开采方式,上部工作面回采之后对采空区下回采巷道形成支承压力。通过监测某矿井近距离煤层采空区下回采工作面巷道、围岩结构、围岩变形程度和测量松动圈,结果发现:煤柱帮破碎、裂隙发育,顺槽两...
电磁组件主要负责驱动打印针运动,打印组件则是实际与色带接触的部分,通过击打色带来实现打印。散热组件确保打印头在高速工作时不会过热,而支架和垫片则提供稳定性和缓冲效果。打印头通常装载在字车上,可以根据...
西门子V90伺服在EPOS模式下回原点以及设置软硬限位
为确定近距离煤层下回采工作面回采巷道的合理支护参数,以某煤矿3~#煤为研究对象,采用正交试验、数值模拟、工程应用的研究方法对3~#煤层回采巷道的合理支护参数进行研究。研究结果表明:巷道保持稳定的锚杆参数为?22 ...
【大采深动态压力下回采巷道】的议题主要关注在深部开采环境中,如何应对因采矿活动引发的动态压力对回采巷道造成的影响。动态压力是由于开采过程中的开采顺序和工作面推进产生的应力重分布,可能导致巷道两帮变形和...
针对某矿破碎顶板条件下回采巷道的实际情况,客观分析影响巷道变形的5个主要因素,确定破碎围岩巷道支护原则,结合本矿地质条件,最终采用“锚网索+锚注”联合支护的形式,并给出支护参数,为相似条件下巷道围岩支护提供...
通过对回采巷道底板与煤柱的破坏关系分析,得到两帮煤体首先变形破坏是采动影响下回采巷道底鼓的直接原因,认为该类巷道的底鼓类型以挤压流动性底鼓为主,并得出对其底鼓机理的新认识;研究了现有底鼓防止措施,提出了在...
为了进一步探讨近距离煤层采空区下回采巷道围岩支护技术,本文以山西某矿区的近距离煤层群为工程背景,进行了下煤层回采巷道支护方案的设计。结果表明,通过采用高强高预紧力锚杆、短锚索为顶板和两帮支护措施,金属网为...