📄 xmlwriter.java
字号:
package zhangchunliang.model;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import org.jdom.Document;
import org.jdom.Element;
import zhangchunliang.model.DBHandler;
/**
* @author :张春亮|zhangchunliang@neusoft.com
* @version :0.1
*
* <p>Description :该类用于实现从数据库读出数据并生成XML文档的操作</p>
* <p>Project :CIQMS</p>
* <P>Company :东软股份国际合作事业部</p>
* <p>CreateDate :2005-4-26</p>
*/
public class XMLWriter {
Document doc=null;
Element tempElement=null;
DBHandler dbhandler=null;
ResultSet dbInfo=null;//保存数据库信息,即systable表的信息
/*
* name: 构造方法
* Description: 用于实现数据库连接的初始化工作
* @return 无
*/
public XMLWriter(){
dbhandler=new DBHandler();
}
/*
* name: 获得XML文档的方法
* Description: 用于实现从数据库中的读出数据并生成XML文档
* @return 返回Document类型的对象,保存数据库中的数据。
*/
public Document getDocument()throws SQLException{
/*将systable表的信息保存以备以后使用*/
dbInfo=dbhandler.dbQuery("systable");
doc=new Document();
/*创建文档的根结点DataBase*/
Element database =new Element("DataBase").setAttribute("name","ciqms");
doc.setRootElement(database);
/*调用辅助方法addSysTable(),完成系统表的添加工作*/
if(this.addSysTable(doc.getRootElement())==0){
//add system table failure
}
/*调用辅助方法addOtherTables(),完成其它表的添加工作*/
if(this.addOtherTables(doc.getRootElement())==0){
//add other tables failure
}
return doc;
}
/*
* name: 添加系统表的辅助方法
* Description: 用于实现将数据库中的systable表加到文档中
* @return 返回int型,为0添加失败,为1添加成功
*/
private int addSysTable(Element db){
try{
/*获得systable的信息*/
ResultSetMetaData tabInfo=dbInfo.getMetaData();
/*获得systable的列数*/
int numOfColumn=tabInfo.getColumnCount();
int i=0;
/*在文档中创建table结点作为systable的父结点*/
Element table =new Element("table");
/*添加systable的name属性,在文档中记录该表表名*/
table.setAttribute("name","systable");
/*添加systable的primarykey属性,在文档中记录该表的主键信息*/
table.setAttribute("primarykey","no");
/*将table结点做为DataBase的子结点*/
db.addContent(table);
/*将系统表中的所有记录加到文档中*/
while(dbInfo.next()){
/*创建record结点,并将其做为table的子结点*/
Element record=new Element("record");
table.addContent(record);
String data=null;
/*将记录中各字段的数据加到文档中*/
for(i=1;i<=numOfColumn;i++){
try{
/*获取字段的数据*/
data=new String(dbInfo.getString(i));
}catch(Exception e){
//unsupportedencodingexception
}
if(data==null)
data="";
/*创建field结点,并将其做为record的子结点*/
Element field=new Element(
tabInfo.getColumnName(i)).setText(data);
/*在文档中的field结点上添加type属性,表示字段的数据类型*/
field.setAttribute("type",tabInfo.getColumnTypeName(i));
record.addContent(field);
data=null;
}
}
}catch(SQLException e){
//handle sqlexception
return 0;
}
return 1;
}
/*
* name: 添加其它表到文档的方法
* Description: 用于实现将数据库中的除系统表外的所有表都添加到文档中
* @return 返回int型,为0操作成功,为1操作失败
*/
private int addOtherTables(Element db){
try{
dbInfo.beforeFirst();
/*将除系统表以外的所有表都加到文档中*/
while(dbInfo.next()){
/*把每个表都添加做文档中的table结点*/
Element table=new Element("table");
/*为每个表在文档中添加name属性和primarykey属性*/
table.setAttribute("name",dbInfo.getString("tablename"));
table.setAttribute("primarykey",dbInfo.getString("primarykey"));
/*将table结点作为DataBase的子结点*/
db.addContent(table);
/*根据dbInfo保存的信息依次对每个表进行全部查询,得到本次要处理的表的信息*/
ResultSet curTabRs=dbhandler.dbQuery(
dbInfo.getString("tablename"));
/*将本次要处理的表的所有记录加到文档中*/
while(curTabRs.next()){
/*创建record结点,并将其做为table的子结点*/
Element record=new Element("record");
table.addContent(record);
/*获取本次要处理表的信息*/
ResultSetMetaData tabInfo=curTabRs.getMetaData();
/*取得本次要处理表的列数*/
int numOfColumn=tabInfo.getColumnCount();
int i=0;
String fieldData=null;
/*将每个字段的数据都添加到文档中*/
for(i=1;i<=numOfColumn;i++){
try{
fieldData=new String(curTabRs.getString(i));
}catch(Exception e){
//unsupportedencodingexception
}
if(fieldData==null)
fieldData="";
/*创建field结点,并将其作为record的子结点*/
Element field=new Element(
tabInfo.getColumnName(i)).setText(fieldData);
/*为field结点添加type属性,记录该字段的类型*/
field.setAttribute("type",tabInfo.getColumnTypeName(i));
record.addContent(field);
fieldData=null;
}
}
}
}catch(SQLException e){
//handle sqlexception
return 0;
}
return 1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -