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

📄 loadallsourcedata.java

📁 数据仓库工具
💻 JAVA
字号:
/*
  Loader - tool for transfering data from one JDBC source to another and
  doing transformations during copy.
    Copyright (C) 2002-2003  Together
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.
    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 Loader.java
 Date: 03.03.2003.
 @version 2.1 alpha
 @authors:
 Radoslav Dutina  rale@prozone.co.yu
 */



package org.webdocwf.util.loader;

import java.util.*;
import java.sql.*;
import org.webdocwf.util.loader.logging.*;

/**
 *
 * LoadAllSourceData class is used for loading source data which are not maped in
 * importDefinition jobs.
 * @author Radoslav Dutina
 * @version 1.0
 */
public class LoadAllSourceData {

 private Vector columnNameNoMap=new Vector();
 private Vector columnValueNoMap=new Vector();
 private Vector columnTypeNoMap=new Vector();




 /**
  * Public constructor of LoadAllSourceData class. Construct object LoadAllSourceData with an
  * associated parameters.
  * @param connSource defines the connection to source database
  * @param connTarget defines the connection to target database
  * @param sourceTableName defines soruce table name
  * @param vecSourceColumn defines all source clolumn names, for the named source table
  * @param targetTableName defines target table name
  * @param logger defines object of Lo9gger class
  * @param vecRelationColumns defines relation columns for target table
  * @param vecVariableColumns defines variable columns for target table
  * @param vecConstantColumns defines constant columns for target table
  * @param vecUseIDColumns defines ID columns for target table
  * @param vecTimesColumns defines time columns for target table
  * @throws LoaderException
  */
 public LoadAllSourceData(Connection connSource, String sourceTableName, Vector vecSourceColumn,
                           String targetTableName,Connection connTarget,
                           Logger logger, Vector vecRelationColumns,
                           Vector vecVariableColumns, Vector vecConstantColumns,
                           Vector vecUseIDColumns,Vector vecTimesColumns,boolean columnsSuportedTarget, ConfigReader configReaderTarget) throws LoaderException {


    boolean noMap=true;
    Vector columnNames=new Vector();
    Hashtable columnTypes=new Hashtable();
      try{

        Statement stmtSource=connSource.createStatement();
        Statement stmtTarget=connTarget.createStatement();
        //add columns that are apears in relations, variables, constant....
        for (int i = 0; i < vecRelationColumns.size(); i++) {
          vecSourceColumn.add(vecRelationColumns.get(i).toString());
        }
        for (int i = 0; i < vecVariableColumns.size(); i++) {
          vecSourceColumn.add(vecVariableColumns.get(i).toString());
        }
        for (int i = 0; i < vecConstantColumns.size(); i++) {
          vecSourceColumn.add(vecConstantColumns.get(i).toString());
        }
        for (int i = 0; i < vecUseIDColumns.size(); i++) {
          vecSourceColumn.add(vecUseIDColumns.get(i).toString());
        }
        for (int i = 0; i < vecTimesColumns.size(); i++) {
          vecSourceColumn.add(vecTimesColumns.get(i).toString());
        }

        ResultSet rsSource=stmtSource.executeQuery("select * from "+sourceTableName);
//ZK change this. Because of problems with getColumnTypeName()method. Some drivers doesn't support it.
//start  
		int countSourceColumns=rsSource.getMetaData().getColumnCount();
		
		ResultSet rsTarget=null;
        if (columnsSuportedTarget){
        	
			rsTarget = connTarget.getMetaData().getColumns( connTarget.getCatalog(), null, targetTableName, "%" );
			//int countTargetColumns=rsTarget.getMetaData().getColumnCount();
			String columnName = "";
			String columnType = "";
              while(rsTarget.next()){
				columnName = rsTarget.getString(4);
				columnType = rsTarget.getString(6);
                for (int j = 1; j < countSourceColumns+1; j++) {
                  if(columnName.equalsIgnoreCase(rsSource.getMetaData().getColumnName(j))){
                     columnNames.add(columnName);
                     columnTypes.put(columnName,columnType);
                     break;
                  }			
                }	
              }
//end              
        }else{
						//TODO ZK ADDED stmtTarget.setMaxRows(1). Place this as parameter in conf file, like maxRowsSuported 
					if (configReaderTarget.getMaxRowsSupported()){
						stmtTarget.setMaxRows(1);   
        	}   	
            rsTarget=stmtTarget.executeQuery("select * from "+targetTableName);             
            int countTargetColumns=rsTarget.getMetaData().getColumnCount();

	    logger.write("full", "\tAuto maping columns is started.");
		  for (int i = 1; i < countTargetColumns+1; i++) {
		    for (int j = 1; j < countSourceColumns+1; j++) {
		      if(rsTarget.getMetaData().getColumnName(i).equalsIgnoreCase(rsSource.getMetaData().getColumnName(j))){
			columnNames.add(rsTarget.getMetaData().getColumnName(i));
			columnTypes.put(rsTarget.getMetaData().getColumnName(i),rsTarget.getMetaData().getColumnTypeName(i));
			break;
		      }
		    }
		  }
        }
	  int count=columnNames.size();
	  for (int j = 0; j < count; j++) {
	    noMap=true;
	    //dont put column names which are appears in importDefinitin as value columns
	    for (int i = 0; i < vecSourceColumn.size(); i++) {
	      if(columnNames.get(j).toString().equalsIgnoreCase(vecSourceColumn.get(i).toString())){
		noMap=false;
		break;
	      }
	    }
	    if(noMap){
	      String name=columnNames.get(j).toString();
	      String type=(String)columnTypes.get(name);
	      columnNameNoMap.add(name);
	      columnTypeNoMap.add(type);
	      logger.write("full", "\tColumn "+name+",from source table "+sourceTableName+", is automaped. ");
	    }
	  }


          while(rsSource.next()){
            for (int i = 0; i <columnNameNoMap.size(); i++) {
              String columnName=columnNameNoMap.get(i).toString();
              String type=columnTypeNoMap.get(i).toString();
              String columnValue=new String();
//	      if(CheckType.isBinaryObject(type)){
//                columnValue=null;
//              }else{
                if(rsSource.getObject(columnName)==null){
                  columnValue=null;
                }else{
                  columnValue=rsSource.getObject(columnName).toString();
                }
                if(columnValue!=null){
                  if(columnValue.equalsIgnoreCase("")){
                    columnValue=null;
                  }
                }
//              }
              columnValueNoMap.add(columnValue);
            }
          }
        logger.write("full", "\tAuto maping columns is finished.");

        rsSource.close();
        stmtSource.close();

        rsTarget.close();
        stmtTarget.close();

    }catch(SQLException ex){
      String msg="Sorry, but you can't connect to source table: "+sourceTableName;
      LoaderException le =new LoaderException(msg+"\n"+ex,(Throwable)ex);
      throw le;
    }
  }


  /**
   * This method read value of columnNameNoMap parameter
   * @return value of parameter
   */
  public Vector getNoMapSourceColumnName(){
    return columnNameNoMap;
  }

  /**
   * This method read value of columnValueNoMap parameter
   * @return value of parameter
   */
  public Vector getNoMapSourceColumnValue(){
    return columnValueNoMap;
  }

  /**
   * This method read value of columnTypeNoMap parameter
   * @return value of parameter
   */
  public Vector getNoMapSourceColumnType(){
    return columnTypeNoMap;
  }
}

⌨️ 快捷键说明

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