Package com.knowgate.datacopy

Source Code of com.knowgate.datacopy.DataStructOrcl

package com.knowgate.datacopy;

import java.sql.Date;
import java.sql.Timestamp;
import java.sql.SQLException;

import java.io.FileWriter;
import java.io.IOException;

import org.xml.sax.*;

import java.lang.ClassNotFoundException;

import java.util.Vector;

import com.knowgate.debug.DebugFile;

public class DataStructOrcl extends DataStruct {

  public DataStructOrcl() {
  }

  public DataStructOrcl(String sPathXMLFile) throws ClassNotFoundException, IllegalAccessException, InstantiationException, IOException, SAXException {
    super(sPathXMLFile);
  }

  // ----------------------------------------------------------

  private String sqlldr (Object oValue) {
    String sClass;
    String sRetVal;
    Date dtValue;
    Timestamp tsValue;

    if (null==oValue) {
      sRetVal = "NULL";
    }
    else {
      sClass = oValue.getClass().getName();

      if (sClass.equals("java.lang.String"))
        sRetVal = "\"" + oValue.toString() + "\"";
      else if (sClass.equals("java.util.Date") || sClass.equals("java.sql.Date")) {
        dtValue = (Date) oValue;
        sRetVal = String.valueOf(dtValue.getYear()+1900) + "-";
        sRetVal += (dtValue.getMonth()+1<10 ? "0" + String.valueOf(dtValue.getMonth()+1) : String.valueOf(dtValue.getMonth()+1)) + "-";
        sRetVal += (dtValue.getDay()+1<10 ? "0" + String.valueOf(dtValue.getDay()+1) : String.valueOf(dtValue.getDay()+1)) + " ";
        sRetVal += (dtValue.getHours()<10 ? "0" + String.valueOf(dtValue.getHours()) : String.valueOf(dtValue.getHours())) + ":";
        sRetVal += (dtValue.getMinutes()<10 ? "0" + String.valueOf(dtValue.getMinutes()) : String.valueOf(dtValue.getMinutes())) + ":";
        sRetVal += (dtValue.getSeconds()<10 ? "0" + String.valueOf(dtValue.getSeconds()) : String.valueOf(dtValue.getSeconds()));
        dtValue = null;
      }
      else if (sClass.equals("java.sql.Timestamp")) {
        tsValue = (Timestamp) oValue;
        sRetVal = String.valueOf(tsValue.getYear()+1900) + "-";
        sRetVal += (tsValue.getMonth()+1<10 ? "0" + String.valueOf(tsValue.getMonth()+1) : String.valueOf(tsValue.getMonth()+1)) + "-";
        sRetVal += (tsValue.getDay()+1<10 ? "0" + String.valueOf(tsValue.getDay()+1) : String.valueOf(tsValue.getDay()+1)) + " ";
        sRetVal += (tsValue.getHours()<10 ? "0" + String.valueOf(tsValue.getHours()) : String.valueOf(tsValue.getHours())) + ":";
        sRetVal += (tsValue.getMinutes()<10 ? "0" + String.valueOf(tsValue.getMinutes()) : String.valueOf(tsValue.getMinutes())) + ":";
        sRetVal += (tsValue.getSeconds()<10 ? "0" + String.valueOf(tsValue.getSeconds()) : String.valueOf(tsValue.getSeconds()));
        tsValue = null;
      }
      else {
        sRetVal = oValue.toString();
      }
    } // fi(null==oValue)

    return sRetVal;
  }

  // ----------------------------------------------------------

  public void createSQLLoaderFiles(String sBasePath) throws IOException,SQLException {
    DataRowSet oDatR;
    DataTblDef oTblD;
    FileWriter oFilW;

    if (DebugFile.trace) {
      DebugFile.writeln ("Begin DataStruct.createSQLLoaderFiles(" + sBasePath + ")");
      DebugFile.incIdent();
    }

    prepareStatements();

    for (int t=0; t<cTables; t++) {
      oDatR = getRowSet(t);
      oTblD = TrMetaData[t];
      oFilW = new FileWriter(sBasePath + oDatR.OriginTable + ".CTL", false);
      oFilW.write("LOAD DATA\n");
      oFilW.write("INFILE *\n");
      oFilW.write("REPLACE INTO TABLE " + oDatR.TargetTable +"\n");
      oFilW.write("FIELDS TERMINATED BY \"`\" OPTIONALLY ENCLOSED BY '\"'\n");
      oFilW.write("(\n");
      for (int c=0; c<oTblD.ColCount; c++) {
        oFilW.write("  " + oTblD.ColNames[c]);
        if (oTblD.ColTypes[c]==java.sql.Types.DATE || oTblD.ColTypes[c]==java.sql.Types.TIMESTAMP)
          oFilW.write(" DATE \"YYYY-MM-DD HH24-MI-SS\"");
        oFilW.write(" NULLIF (" + oTblD.ColNames[c] + " = \"NULL\")");
        oFilW.write(c<oTblD.ColCount-1 ? ",\n" : ")\n");
      } // next(c)
      oFilW.write("BEGINDATA\n");
      oFilW.close();
    } // next(t)

    if (DebugFile.trace) {
      DebugFile.decIdent();
      DebugFile.writeln ("End DataStruct.createSQLLoaderFiles()");
    }
  } // createSQLLoaderFiles()

  // ----------------------------------------------------------

  public void dump(Object[] OrPK, Object[] TrPK,  int cParams, String sBasePath) throws SQLException,IOException {
    // Inserta registros del Origen en el Destino,
    // si encuentra un registro duplicado lo actualiza sin dar ningún error,
    // si el registro no está, lo inserta

    DataTblDef oMDat;
    Object oValue;
    int iPK;
    FileWriter TblFiles[] = new FileWriter[cTables];

    if (DebugFile.trace) {
      DebugFile.writeln ("Begin DataStruct.dump(OrPK[], TrPK[], " + String.valueOf(cParams) + ", " + sBasePath + ")");
      DebugFile.incIdent();
    }

    for (int t=0; t<cTables; t++)
      TblFiles[t] = new FileWriter(sBasePath + getRowSet(t).OriginTable + ".CTL", true);

    execCommands("INIT", -1, OrPK, cParams);

    // Iterar sobre las tablas: para cada una de ellas leer sus registros e insertarlos en destino
    for (int s=0; s<cTables; s++) {
      if (DebugFile.trace) DebugFile.writeln ("processing rowset from " + getRowSet(s).OriginTable + " to " + getRowSet(s).TargetTable);

      execCommands("BEFORE", s, OrPK, cParams);

      getRows(OrPK, TrPK, cParams, s); // Modifica {iRows, iCols} como efecto lateral

      oMDat = TrMetaData[s];

      // Iterar sobre cada fila leida en origen y escribirla en el fichero correspondiente
      for (int r=0; r<iRows; r++) {
          iPK = 0;
          // Iterador de parametros de entrada
          for (int q=0; q<iCols; q++) {
            oValue = ((Vector) oResults.get(r)).get(q);

            if ((oMDat.isPrimaryKey(q))) {
              if (iPK>=cParams)
                TblFiles[s].write(sqlldr(oValue));
              else if (null==TrPK[iPK])
                TblFiles[s].write(sqlldr(oValue));
              else
                TblFiles[s].write(sqlldr(TrPK[iPK]));
              iPK++;
            }
            else
              TblFiles[s].write(sqlldr(oValue));
            if (q<iCols-1) TblFiles[s].write("`");
          } // end for (q)
      TblFiles[s].write("\n");
      } // end for (r)

      oResults.clear();
      oResults = null;

      execCommands("AFTER", s, OrPK, cParams);
    } // end for (s)

    execCommands("TERM", -1, OrPK, cParams);

    for (int t=0; t<cTables; t++)
      TblFiles[t].close();

    if (DebugFile.trace) {
      DebugFile.decIdent();
      DebugFile.writeln ("End DataStruct.dump()");
    }
  } // dump()
}
TOP

Related Classes of com.knowgate.datacopy.DataStructOrcl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.