📄 loadallsourcedata.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 + -