version 1.65, 2004/08/02 11:39:23
|
version 1.66, 2004/08/03 11:41:16
|
Line 29 import java.sql.PreparedStatement;
|
Line 29 import java.sql.PreparedStatement;
|
import java.sql.SQLException; |
import java.sql.SQLException; |
import java.sql.Statement; |
import java.sql.Statement; |
import java.sql.Types; |
import java.sql.Types; |
|
import java.text.ParseException; |
import java.util.ArrayList; |
import java.util.ArrayList; |
import java.util.Iterator; |
import java.util.Iterator; |
import java.util.List; |
import java.util.List; |
Line 2000 class Convert
|
Line 2001 class Convert
|
{ |
{ |
long startTime = System.currentTimeMillis(); |
long startTime = System.currentTimeMillis(); |
int counter = -1; |
int counter = -1; |
|
TreeSet linesToDelete = null; |
|
PreparedStatement delPSt = null; |
while (true) |
while (true) |
{ |
{ |
++counter; |
++counter; |
Line 2016 class Convert
|
Line 2019 class Convert
|
rowCount = vec.size(); |
rowCount = vec.size(); |
// Deletion will work this way |
// Deletion will work this way |
Vector deleted = new Vector(vec); |
Vector deleted = new Vector(vec); |
TreeSet linesToDelete = new TreeSet(vecDest); |
linesToDelete = new TreeSet(vecDest); |
|
|
TreeSet linesToAppend = new TreeSet(vec); |
TreeSet linesToAppend = new TreeSet(vec); |
// remove all lines that are already in dest database |
// remove all lines that are already in dest database |
Line 2025 class Convert
|
Line 2028 class Convert
|
linesToDelete.removeAll(deleted); |
linesToDelete.removeAll(deleted); |
System.out.println("linesToAppend " + linesToAppend + " " + vecDest + " " + destTableName); |
System.out.println("linesToAppend " + linesToAppend + " " + vecDest + " " + destTableName); |
System.out.println("linesToDelete " + linesToDelete + " " + vecDest + " " + destTableName); |
System.out.println("linesToDelete " + linesToDelete + " " + vecDest + " " + destTableName); |
// prepare new query for next chunk |
System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIds.size()); |
if (query.indexOf("where") > 0) |
deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls); |
tempQuery = query + " and " + tempID + ">='" + vec.firstElement() + "' and " + tempID + "<='" + vec.lastElement() + "' order by " + tempID; |
|
else |
|
tempQuery = query + " where " + tempID + ">='" + vec.firstElement() + "' and " + tempID + "<='" + vec.lastElement() + "'"; // order by "+tempID; |
|
System.out.println("tempQuery is now " + tempQuery + " order by " + tempID); |
|
// bean.makeQuery(tempQuery,vec.size()); |
|
|
|
ConversionProperties prop = getFieldNamesAndDestTableName(creates.get(tbIndex).toString(), query, names.get(tbIndex).toString()); |
ConversionProperties prop = getFieldNamesAndDestTableName(creates.get(tbIndex).toString(), query, names.get(tbIndex).toString()); |
StringBuffer insCommand = createInsertCommand(prop.destTableName, prop.fieldNames); |
StringBuffer insCommand = createInsertCommand(prop.destTableName, prop.fieldNames); |
StringBuffer updCommand = createUpdateCommand(prop.destTableName, prop.fieldNames, tempID); |
StringBuffer updCommand = createUpdateCommand(prop.destTableName, prop.fieldNames, tempID); |
StringBuffer delCommand = createDeleteCommand(destTableName,tempID); |
StringBuffer delCommand = createDeleteCommand(destTableName,tempID); |
PreparedStatement insPst = beanDest.getConnection().prepareStatement(insCommand.toString()); |
PreparedStatement insPst = beanDest.getConnection().prepareStatement(insCommand.toString()); |
PreparedStatement updPst = beanDest.getConnection().prepareStatement(updCommand.toString()); |
PreparedStatement updPst = beanDest.getConnection().prepareStatement(updCommand.toString()); |
PreparedStatement delPSt = beanDest.getConnection().prepareStatement(delCommand.toString()); |
delPSt = beanDest.getConnection().prepareStatement(delCommand.toString()); |
Vector[] vectors = bean.getQueryData(tempQuery, vec.size()); |
|
int idIndex = vectors[1].indexOf(idField); |
|
// todo arraylist code has to be added |
|
for (Iterator iter = vectors[0].iterator(); iter.hasNext();) |
|
{ |
|
Vector line = (Vector) iter.next(); |
|
Object lineIDIndex = line.get(idIndex); |
|
System.out.println("line " + linesToDelete.contains(line.get(idIndex))+" "+lineIDIndex); |
|
if (linesToAppend.contains(lineIDIndex)) |
|
{ |
|
for (int l = 0; l < line.size(); ++l) |
|
{ |
|
Object obj = line.get(l); |
|
if (obj != null) |
|
insPst.setString(l + 1, obj.toString()); |
|
else |
|
insPst.setNull(l + 1, Types.NULL); |
|
} |
|
insPst.execute(); |
|
|
|
} |
|
|
|
else // update |
if (vec.size() <= numIntervalls) |
{ |
{ |
for (int l = 0; l < line.size(); ++l) |
endIndex = 0; |
|
deltaID = vec.size(); |
|
} |
|
for (int k = 0; k < vec.size() - deltaID; k = k + deltaID) |
{ |
{ |
Object obj = line.get(l); |
System.out.println(vec.get(k) + " " + vec.get(k + deltaID) + " " + vec.lastElement()); |
if (obj != null) |
if (query.indexOf("where") > 0) |
updPst.setString(l + 1, obj.toString()); |
tempQuery = query + " and " + tempID + ">='" + vec.get(k) + "' and " + tempID + "<='" + vec.get(k + deltaID) + "'"; |
else |
else |
updPst.setNull(l + 1, Types.NULL); |
tempQuery = query + " where " + tempID + ">='" + vec.get(k) + "' and " + tempID + "<='" + vec.get(k + deltaID) + "'"; |
} |
System.out.println(tempQuery); |
updPst.setString(line.size()+1,line.get(idIndex).toString()); |
|
updPst.execute(); |
|
|
|
} |
|
} |
|
|
|
// delPSt.setString(1,"6"); |
|
// delPSt.setString(1,"7"); |
|
// delPSt.setString(1,"8"); |
|
|
|
//delPSt.execute(); |
|
System.out.println(); |
|
// System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIdsDest.size()); |
|
/// @TODO complete delete task remove query show lines to be deleted let user choose if he wants that |
|
System.out.println("number of lines to be deleted " + linesToDelete.size()); |
|
deltaID = (int) Math.round((double) myIds.size() / (double) numIntervalls); |
|
System.out.println("deltaID " + deltaID); |
|
//System.out.println(); |
|
|
|
if (true) |
|
return; |
|
|
|
beanDest.setConnection(destination); |
|
|
|
Statement stm = beanDest.getConnection().createStatement(); |
|
|
|
Vector tables = beanDest.getTableNames(); |
|
// Collections.sort(tables); |
|
System.out.println(names.get(tbIndex) + " " + tables.indexOf(convertText((String) names.get(tbIndex)))); // "//beanDest.getTypeNames()); |
|
tables = beanDest.getTableNames(); |
|
// System.out.println(beanDest.getTableNames(beanDest.getCatalogs().get(2).toString())); |
|
stm = beanDest.getConnection().createStatement(); |
|
|
|
if (dialog != null) |
if (dialog != null) |
dialog.title.setText(" Deleting table data ..."); |
dialog.title.setText("Reading table data ..."); |
|
|
int j = -1; |
|
|
|
Vector row = null; |
// bean.makeQuery(tempQuery, deltaID); |
command = new StringBuffer(); |
if (dialog != null) |
|
dialog.title.setText("Writing table data ..."); |
|
|
command.append("DELETE FROM"); |
performSynchronize(idField, vec, tempQuery, linesToDelete, linesToAppend, insPst, updPst, delPSt, deltaID); |
command.append(beanDest.getQC()); |
// System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIdsDest.size()); |
command.append(destTableName); |
endIndex = k + deltaID; |
//command.append(convertText((String) names.get(tbIndex))); |
} |
command.append(beanDest.getQC()); |
System.out.println(endIndex); |
int size = bean.getColumnNames().size(); |
//all data written ? if not write last chunk of data |
command.append("WHERE " + convertText(ids.get(tbIndex).toString()) + " = ?"); |
if (endIndex == vec.size() - 1) |
PreparedStatement pstm = beanDest.getConnection().prepareStatement(command.toString()); |
System.out.println("fits"); |
System.out.println(command + " " + tbIndex); |
else |
//int rowCount = bean.getRowCount(query); |
|
// int idIndex = bean.getColumnNames().indexOf(ids.get(tbIndex)); |
|
/* while (true) |
|
{ |
{ |
|
System.out.println(" last intervall from " + vec.get(endIndex) + " " + vec.lastElement()); |
|
|
++j; |
if (query.indexOf("where") > 0) |
if (j == linesToDelete.size()) |
tempQuery = query + " and " + tempID + ">='" + vec.get(endIndex) + "' and " + tempID + "<='" + vec.lastElement() + "'"; |
break; |
else |
//print rows |
tempQuery = query + " where " + tempID + ">='" + vec.get(endIndex) + "' and " + tempID + "<='" + vec.lastElement() + "'"; |
pstm.setString(1, linesToDelete.get(j).toString()); |
System.out.println(tempQuery); |
System.out.println(pstm.toString()); |
|
pstm.execute(); |
|
if (dialog != null) |
if (dialog != null) |
dialog.progress.setValue((int) (((double) (j + 1) / (double) rowCount) * 100.0)); |
dialog.title.setText("Reading table data ..."); |
command = null; |
bean.makeQuery(tempQuery, 0); |
|
if (dialog != null) |
|
dialog.title.setText("Writing table data ..."); |
|
performSynchronize(idField, vec, tempQuery, linesToDelete, linesToAppend, insPst, updPst, delPSt, deltaID); |
|
// System.out.println("ID LIST SIZE " + Math.round((double) myIds.size() / (double) numIntervalls) + " " + myIdsDest.size()); |
} |
} |
// prepare new query for next chunk |
// prepare new query for next chunk |
if (query.indexOf("where") > 0) |
if (query.indexOf("where") > 0) |
tempQuery = query + " and " + tempID + ">'" + vec.lastElement() + "'"; |
tempQuery = query + " and " + tempID + ">'" + vec.lastElement() + "'"; |
else |
else |
tempQuery = query + " where " + tempID + ">'" + vec.lastElement() + "'"; |
tempQuery = query + " where " + tempID + ">'" + vec.lastElement() + "'"; |
*/ |
|
} //to outer while |
} |
|
for (Iterator iter = linesToDelete.iterator(); iter.hasNext();) |
|
{ |
|
String id = (String) iter.next(); |
|
delPSt.setString(1, id); |
|
delPSt.execute(); |
|
|
|
} |
|
|
|
long endTime = System.currentTimeMillis(); |
|
System.out.println("Time for incremental synchronize elapsed " + (endTime - startTime)); |
} // to idfield if |
} // to idfield if |
} // table loop |
} // table loop |
|
|
Line 2171 class Convert
|
Line 2126 class Convert
|
|
|
dialog.setVisible(false); |
dialog.setVisible(false); |
} |
} |
|
} |
|
private static void performSynchronize( |
|
String idField, |
|
Vector vec, |
|
String tempQuery, |
|
TreeSet linesToDelete, |
|
TreeSet linesToAppend, |
|
PreparedStatement insPst, |
|
PreparedStatement updPst, |
|
PreparedStatement delPSt, |
|
int deltaID) |
|
throws SQLException, ParseException |
|
{ |
|
Vector[] vectors = bean.getQueryData(tempQuery, deltaID); |
|
int idIndex = vectors[1].indexOf(idField); |
|
// todo arraylist code has to be added |
|
for (Iterator iter = vectors[0].iterator(); iter.hasNext();) |
|
{ |
|
Vector line = (Vector) iter.next(); |
|
Object lineIDIndex = line.get(idIndex); |
|
System.out.println("line " + linesToAppend.contains(line.get(idIndex)) + " " + lineIDIndex); |
|
if (linesToAppend.contains(lineIDIndex)) |
|
{ |
|
for (int l = 0; l < line.size(); ++l) |
|
{ |
|
Object obj = line.get(l); |
|
if (obj != null) |
|
insPst.setString(l + 1, obj.toString()); |
|
else |
|
insPst.setNull(l + 1, Types.NULL); |
|
} |
|
insPst.execute(); |
|
|
|
} else // update |
|
{ |
|
for (int l = 0; l < line.size(); ++l) |
|
{ |
|
Object obj = line.get(l); |
|
if (obj != null) |
|
updPst.setString(l + 1, obj.toString()); |
|
else |
|
updPst.setNull(l + 1, Types.NULL); |
|
} |
|
updPst.setString(line.size() + 1, line.get(idIndex).toString()); |
|
updPst.execute(); |
|
|
|
} |
|
} |
|
|
} // to method |
} // to method |
|
|
/** |
/** |