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

📄 logimportdef.java

📁 具备多表组合查询组件功能。通过将表字段与表间关系映射到对象关系及属性
💻 JAVA
字号:
package cn.edu.buaa.ieguam.logmanage;

import cn.edu.buaa.ieguam.logmanage.MBean;
import cn.edu.buaa.ieguam.logmanage.MBeanInfoSetting;
import cn.edu.buaa.ieguam.logmanage.DBConnection;

import java.lang.StringBuffer;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;

/**
 * 定义并实现日志导入的处理规则
 * @author tongxiaodong
 * Creation time:Apr 23, 2007 10:49:29 PM
 */

public class LogImportDef implements ReadTreeMBean {
	
	
    private DBConnection dbConnect = null;
	
    public LogImportDef()
	{
		
	}
    public LogImportDef(DBConnection dbConnection)
	{
		this.dbConnect = dbConnection;
	}
	
	public void readMBean(Object fatherMBean, Object childMBean, String side) throws Exception 
	{
		// TODO Auto-generated method stub
		MBean child = (MBean)childMBean;
		
		MBeanInfoSetting mbInfoSet = new MBeanInfoSetting();
				
		String insertSql = null;
		String querySql = null;
		
		
		
		if(child.getDegree().equals("work")==false)
		{
			return;
		}
		/********* test *************/
		//System.out.println("readMBean : testRead_2");
		
		/*********************/
		//根据childMBean节点的fkmMap关系,设置该节点相关字段的值
		mbInfoSet.settingFkmForInsert(child);
		
	    
		//生成插入语句
		insertSql = this.makeInsertSql(child);
		
		/********* test *************/
		//System.out.println("InsertSQL : testInsert_1");
		System.out.println("InsertSQL : "+ insertSql);
		/*********************/
		//执行插入语句
		if(insertSql == null)
		{
			return;
		}
		//this.dbConnect.connect();
		//this.dbConnect.executeInsert(insertSql);
		//this.dbConnect.closeConnec();
		
		//判断是否有必要执行查询语句,若需要则生成查询语句,并查出刚插入记录的所有信息。
	
		if(this.needQuery(child)==true)
		{
			/********* test *************/
			//System.out.println("QuerySQL : testQuery_2");
			//System.out.println("QuerySQL : "+ child.getPojoName());
			/*********************/
			querySql = this.makeQuerySql(child);
			
			/********* test *************/
			//System.out.println("QuerySQL : testQuery_1");
			System.out.println("QuerySQL : "+ querySql);
			/*********************/
			//this.dbConnect.connect();
			//this.dbConnect.executeQuery(querySql);
			//this.dbConnect.closeConnec();
		}
		
	
	
		//根据查询信息,给pojo中所有空属性值赋值。
		//ResultSet rst = this.dbConnect.getResultSet();
		//this.settingColValue(rst,child);
        
	}
	
	/**
	 * 构造插入操作的SQL语句
	 * @return
	 */
	public String makeInsertSql(MBean mBean)
	{
		String insertSql = null;	
		StringBuffer intoStr = new StringBuffer();
		StringBuffer valuesStr = new StringBuffer();
		
		int size = 0;
		int iNum = 0;
		
		/********* test *************/
		//System.out.println("makeInsertSQL : test_1");
		/*********************/
		
		List colInsertList = mBean.getColInsertList();
		if(colInsertList == null)
		{
			return null;
		}
		String pojoCol = null;
		
		size = colInsertList.size();
		
		intoStr.append("Into "+mBean.getTableName()+" ");
		valuesStr.append("Values( ");
		
		for(iNum=0;iNum<size;iNum++)
		{
			pojoCol = (String)colInsertList.get(iNum);
			
			/********* test *************/
			//System.out.println("tong : test_1");
			//System.out.println(pojoCol);
			/*********************/
			
			intoStr = intoStr.append(this.combineInto(mBean,pojoCol));
			valuesStr = valuesStr.append(this.combineValues(mBean,pojoCol,","));
		}
		
		intoStr = this.deleTail(intoStr,",");
		valuesStr = this.deleTail(valuesStr,",");
		valuesStr.append(" );");
		
		insertSql = "Insert "+intoStr.toString()+" "+valuesStr.toString();
		
		return insertSql;
	}
	
	/**
	 * 构造查询操作的SQL语句
	 * @return
	 */
	public String makeQuerySql(MBean mBean)
	{
		String querySql = null;
		
		
		StringBuffer selectStr = new StringBuffer();
		StringBuffer fromStr = new StringBuffer();
		StringBuffer whereStr = new StringBuffer();
		
		List colQueryList = null;
		Iterator iter = null;
		String pojoCol = null;
		
		colQueryList = mBean.getColInsertList();
		if(colQueryList == null)
		{
			return null;
		}
		
		selectStr = selectStr.append("Select * ");
		fromStr = fromStr.append("  From "+mBean.getTableName());
		whereStr = whereStr.append("  Where ");
		
		
		
		iter = colQueryList.iterator();
		while(iter.hasNext())
		{
			pojoCol = (String) iter.next();
			whereStr = whereStr.append(this.combineWhere(mBean,pojoCol,"And"));	
		}
		whereStr = this.deleTail(whereStr,"And");
		whereStr = whereStr.append(";");
		
		querySql = selectStr.toString()+fromStr.toString()+whereStr.toString();
		
		return querySql;
	}
	
	/**
	 * 构造SQL插入语句中的Into部分
	 * @return
	 */
	public StringBuffer combineInto(MBean mBean,String pojoCol)
	{
			
		StringBuffer into = new StringBuffer();
		MBean.SubBean subBean = null;
				
		subBean = (MBean.SubBean) mBean.getOneOrm(pojoCol);
		if(subBean != null)
		{
			into.append(subBean.getTableCol()+",");
		}			
				
		return into;
	}
	
	/**
	 * 构造SQL插入语句中的Values部分
	 * 参数linkSym是每个条件后的连接符号,例如“,”或“And”
	 * @return
	 */
	public StringBuffer combineValues(MBean mBean,String pojoCol,String linkSym)
	{
		StringBuffer values= new StringBuffer();
			
		//应该从pojo中获取value值	
		
		if(mBean.getPojo().getColValue(pojoCol) != null)
		{
			if(mBean.getPojo().getColValue(pojoCol) instanceof String)//若value的值为String类型
			{
				values.append("'"+mBean.getPojo().getColValue(pojoCol)+"'"+linkSym);
			}
			else
			{
				values.append(mBean.getPojo().getColValue(pojoCol).toString()+linkSym);
			}
		}
		else
		{
			values.append("null"+linkSym);
		}
				
		return values;
	}
	

	/**
	 * 构造SQL查询语句中的Where部分
	 * 参数linkSym是每个条件后的连接符号,例如“,”或“And”
	 * @return
	 */
	public StringBuffer combineWhere(MBean mBean,String pojoCol,String linkSym)
	{
		StringBuffer where= new StringBuffer();
		MBean.SubBean subBean = null;
		String tableCol = null;
		
		subBean = (MBean.SubBean) mBean.getOneOrm(pojoCol);
		tableCol = subBean.getTableCol();
			
		//应该从pojo中获取value值	
		
		if(mBean.getPojo().getColValue(pojoCol) != null)
		{
			if(mBean.getPojo().getColValue(pojoCol) instanceof String)//若value的值为String类型
			{
				where.append(tableCol+"='"+mBean.getPojo().getColValue(pojoCol)+"' "+linkSym+" ");
			}
			else
			{
				where.append(tableCol+"="+mBean.getPojo().getColValue(pojoCol).toString()+" "+linkSym+" ");
			}
		}
		else
		{
			where.append(tableCol+"=null "+linkSym+" ");
		}
				
		return where;
	}
	

	
	/**
	 * 判断此节点mBean是否查询操作
	 * @param mBean
	 * @return
	 */
	private boolean needQuery(MBean mBean)
	{
		MBean father = null;
		
		boolean flag = false;
		
		father = mBean.getFather();
		if(father != null)
		{
			if(father.hasLeftChild(mBean)!= null)//若mBean为father的左子节点
			{
				flag = true;
			}
		}
		if(mBean.hasRightChild())//若mBean存在右子节点
		{
			flag = true;
		}
		return flag;
		
	}
	
	/**
	 * 去掉strBufArg尾部与tail匹配的部分,用于去除Select、From字符串末尾的“,”,Where字符串末尾的“And”
	 * @param strBufArg
	 * @param tail
	 * @return
	 */
	public StringBuffer deleTail(StringBuffer strBufArg,String tail)
	{
		int iNum = 0;
		int kNum = 0;
		int flag = 0;
		
		for(iNum=strBufArg.length()-1;iNum>=tail.length()-1;iNum--)
		{
			flag = iNum;
			for(kNum=tail.length()-1;kNum>=0;kNum--)
			{
				if(strBufArg.charAt(flag) != tail.charAt(kNum))
				{
					break;
				}
				flag--;		
			}
			if(kNum<0)//若找到与tail匹配的字串
			{
				break;
			}
		}
		if(iNum>=tail.length()-1)//若找到与tail匹配的字串
		{
			strBufArg.delete(iNum-tail.length()+1,strBufArg.length());
		}
		
		return strBufArg;
	}
	
	/**
	 * 将ResultSet中的值赋给mBean的各属性
	 * @param resultSet
	 * @param mBean
	 * @throws SQLException 
	 */
	private void settingColValue(ResultSet resultSet,MBean mBean) throws SQLException
	{
		if(resultSet==null || mBean==null)
		{
			return;
		}
		
		Iterator keyIter = null;
		String pojoCol = null;
		String tableCol = null;
		MBean.SubBean subBean = null;
		
		
		if(resultSet.next()==true)
		{
			keyIter = mBean.getOrmMap().keySet().iterator();
			while(keyIter.hasNext())
			{
				pojoCol = (String)keyIter.next();
				subBean = (MBean.SubBean)mBean.getOneOrm(pojoCol);
				tableCol = subBean.getTableCol();
				
				mBean.getPojo().setColValue(pojoCol,resultSet.getObject(tableCol));
					
			}
		}
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -