📄 xmlreader.java
字号:
package zhangchunliang.model;
import zhangchunliang.model.DBHandler;
import org.jdom.Document;
import org.jdom.Element;
import java.util.List;
import java.util.Iterator;
import java.sql.SQLException;
/**
* @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 XMLReader {
DBHandler dbHandler=null;
Document doc=null;
/*
* name: 构造方法
* Description: 用于实现数据库连接和文档的初始化工作
* @param 传递一个文档doc
* @return 无
*/
public XMLReader(Document doc){
this.doc=doc;
dbHandler=new DBHandler();
}
/*
* name: 将文档中的数据恢复到数据库的方法
* Description: 用于实现将文档中的数据恢复到数据库工作
* @param 无
* @return 返回boolean型,为true时表示恢复成功,为false时表示恢复失败
*/
public boolean xmlWriteDB()throws SQLException{
/*获得文档的根结点DataBase*/
Element db=doc.getRootElement();
/*取出DataBase结点下所有名为table的子结点*/
List tables=db.getChildren("table");
Iterator tabPointer=tables.iterator();
/*将结点table下的所有数信息恢复到相对应的数据库中的表中*/
while(tabPointer.hasNext()){
Element table=(Element)tabPointer.next();
/*取得该表表名*/
String tabName=table.getAttributeValue("name");
/*取得该表的主键名*/
String tabKey=table.getAttributeValue("primarykey");
/*将该talbe结点下的所有名为record的结点取出来*/
List records=table.getChildren("record");
Iterator recordPointer=records.iterator();
/*将该record结点下的所有名为field的数据取出,并将该记录恢复到数据库*/
while(recordPointer.hasNext()){
Element record=(Element)recordPointer.next();
/*生成查看该记录是否在数据库中的条件字符串*/
String condition=getCondition(tabKey,record.getChild(tabKey));
/*判断该记录是否在数据库中存在,存在进行更新操作,否则进行插入操作*/
if(dbHandler.isExist(tabName,condition)){
/*调用辅助方法updateDB()进行更新数据库操作*/
this.updateDB(record,tabName,tabKey);
}
else{
/*调用辅助方法insertDB()进行数据库插入操作*/
this.insertDB(record,tabName);
}
}
}
return true;
}
/*
* name: 辅助方法
* Description: 用于实现将给定文档结点中的数据恢复到数据库工作
* @param Element型的记录结点,String型的目标表名,String型的目标表的主键名
* @return 返回boolean型,为true时表示恢复成功,为false时表示恢复失败
*/
private boolean updateDB(Element record,String tabName,String tabKey)
throws SQLException{
String exp="";
String condition="";
/*取得record结点下的所有子结点,即field结点*/
List fields =record.getChildren();
Iterator fieldPointer=fields.iterator();
/*取得第一个结点*/
Element firstField=(Element)fieldPointer.next();
/*形成UPDATE语句中的第一个字段的赋值字符串*/
exp+=getFieldName(firstField)+"="+getFieldValue(firstField);
/*形成其它字段的赋值字符串*/
while(fieldPointer.hasNext()){
Element field=(Element)fieldPointer.next();
exp+=","+getFieldName(field)+"="+getFieldValue(field);
}
/*形成UPDATE语句的WHERE部分*/
condition+=getCondition(tabKey,record.getChild(tabKey));
/*调用DBHandler对象的dbUpdate方法,执行更新操作*/
if(dbHandler.dbUpdate(tabName,exp,condition)==0)
return false;
else
return true;
}
/*
* name: 辅助方法
* Description: 用于实现将文档中给定结点下的数据恢复到数据库工作
* @param Element型的记录结点,String型的目标表名。
* @return 返回boolean型,为true时表示恢复成功,为false时表示恢复失败
*/
private boolean insertDB(Element record,String targetTable)
throws SQLException{
String fieldStr="";
String values="";
/*得到record结点下的所有field结点*/
List fields =record.getChildren();
Iterator fieldPointer=fields.iterator();
/*取得第一个field结点*/
Element firstField=(Element)fieldPointer.next();
/*形成INSERT语句的第一个列名字符串和第一个值字符串的*/
fieldStr+="("+getFieldName(firstField);
values+=getFieldValue(firstField);
/*形成INSERT语句的其它列名字符串和其它值字符串*/
while(fieldPointer.hasNext()){
Element field=(Element)fieldPointer.next();
fieldStr+=","+getFieldName(field);
values+=","+getFieldValue(field);
}
fieldStr+=")";
/*调用dbHandler对象的dbAdd方法,执行插入操作*/
if(dbHandler.dbAdd(targetTable,fieldStr,values)==0)
return false;
else
return true;
}
/*
* name: 辅助方法
* Description: 用于实现将文档中给定的field结点的名字取出
* @param Element型,传递field结点对象
* @return 返回String型,返回结点的名字
*/
private String getFieldName(Element field){
return field.getName();
}
/*
* name: 辅助方法
* Description: 用于实现将文档中给定的field结点的数据取出
* @param Element型,传递field结点对象
* @return 返回String型,返回结点的数据
*/
private String getFieldValue(Element field){
String fieldValue=null;
/*如果给定field的type属性是"VARCHAR",进行特殊处理*/
if(field.getAttributeValue("type").equals("VARCHAR")){
try{
/*取得结点的数据*/
fieldValue=new String(field.getTextTrim());
}catch(Exception e){
//System.out.println("UnsporttedEncodingException.......");
}
/*返回SQL语句中字符串*/
return "'"+fieldValue+"'";
}
/*如果field结点的type属性是"DATE",进行特殊处理*/
else if(field.getAttributeValue("type").equals("DATE")){
/*取得结点的数据*/
fieldValue=new String(field.getTextTrim());
/*如果结点的数据为空字符串,则设置默认值*/
if(fieldValue.equals("")){
fieldValue=new String("19000101");
return fieldValue;
}
/*如果结点数据不为空字符串,则将所得到的日期字符串中的"-"去掉*/
else{
String splitArray[]=fieldValue.split("-");
String rtValue="";
for(int i=0;i<splitArray.length;i++){
rtValue+=splitArray[i];
}
return rtValue;
}
}else
return field.getTextTrim();
}
/*
* name: 辅助方法
* Description: 用于实现WHERE语句中的字符串类型字段比较字符串生成的工作
* @param String型,传递表的主键;Element型,传递field结点。
* @return 返回boolean型,为true时表示恢复成功,为false时表示恢复失败
*/
private String getCondition(String tabKey,Element keyField){
/*如果keyFeild的type属性等于"VARCHAR"时,进行特殊处理*/
if(keyField.getAttributeValue("type").equals("VARCHAR"))
return tabKey+" like "+getFieldValue(keyField);
/*如果keyFeild的type属性不等于"VARCHAR"时,进行处理*/
else
return tabKey+" = "+getFieldValue(keyField);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -