⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlreader.java

📁 eclipse java/jsp 航空管理系统
💻 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 + -