--- FM2SQL/Attic/Convert.java 2004/01/29 11:25:40 1.23 +++ FM2SQL/Attic/Convert.java 2004/02/12 13:02:56 1.32 @@ -25,7 +25,8 @@ class Convert static String userDest="postgres",passwdDest="rogo"; static boolean batchRun=false; static Vector databases = new Vector(); - + final static int numHits = 5000; + final static int numIntervalls = 2; public static void main(String args[]) { /* try @@ -478,9 +479,11 @@ class Convert } } - - - +/** + transfers the specified array of tables to the destination database + and creates the table if it does not exist if it exists and mode is not append the table is dropped + + **/ public static void convert(String source,String destination,Vector names,Vector layouts,Vector selects,Vector creates,Vector ids,int mode) throws Exception { FM2SQL.ProgressDialog dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance); @@ -489,7 +492,9 @@ class Convert dialog.setLocation(FM2SQL.fmInstance.getLocationOnScreen().x+(FM2SQL.fmInstance.getWidth()-400)/2,FM2SQL.fmInstance.getLocationOnScreen().y+(FM2SQL.fmInstance.getHeight()-250)/2); dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - java.util.TreeSet myIds; + java.util.TreeSet myIds = new TreeSet(); + int deltaID = 1; + String idField = ""; dialog.thread=Thread.currentThread(); // setting user and passwd bean.setUserAndPasswd(user,passwd); @@ -530,7 +535,7 @@ class Convert } // if ( layout!= "") // query += " layout " + bean.getQC() + layout + bean.getQC(); - dialog.title.setText("Getting table data ..."); + dialog.title.setText("Reading table data ..."); dialog.table.setText(names.get(tbIndex).toString()); dialog.status.setText("Table " + (tbIndex + 1) + " of " + names.size()); dialog.show(); @@ -538,11 +543,11 @@ class Convert bean.getConnection(); bean.makeQuery(query, 50); // @TODO id Vector must be used in querys while loop over id ranges where id>=start and id<=end - myIds = bean.getIDVector(ids.get(tbIndex).toString(),(String) names.get(tbIndex)); - System.out.println("ID LIST SIZE "+myIds.size()); - + idField = ids.get(tbIndex).toString(); + } catch (Exception e) { + System.out.println(e); continue; } //beanDest.setConnection("jdbc:postgresql://erebos/test3"); @@ -611,25 +616,9 @@ class Convert } } - // System.out.println(names); - /* - if (idVal == "") - stm.executeUpdate("INSERT INTO " + DBBean.getQC() + box.getSelectedItem() + DBBean.getQC() + " (" + DBBean.getQC() + columnName + DBBean.getQC() + ") VALUES ('" + value + "') "); - else - stm.executeUpdate("UPDATE " + DBBean.getQC() + box.getSelectedItem() + DBBean.getQC() + " SET " + DBBean.getQC() + columnName + DBBean.getQC() + "='" + value + "' WHERE ID='" + idVal + "' "); - */ - - // Vector[] result2=beanDest.getQueryData(names.get(tbIndex).toString()); - // print results to screen - /* for (int i = 0; i < result[1].size(); ++i) - { - //print Header - // System.out.println(" "+result[1].get(i)+" "+result2[1].get(i)+" "+i); - }*/ - // System.out.println(); dialog.title.setText("Writing table data ..."); - //for (int j = 0; j < result[0].size(); ++j) + // prepare the insert statement int j=-1; Vector row = null; command = new StringBuffer(); @@ -644,68 +633,75 @@ class Convert command.append("?)"); PreparedStatement pstm = beanDest.getConnection().prepareStatement(command.toString()); System.out.println(command); - int rowCount= myIds.size();//bean.getRowCount(query) + int rowCount= (idField!="") ? myIds.size():bean.getRowCount(query); Vector vec = new Vector(myIds); - for(int k=0;k 0) + tempQuery = query + " and " + tempID + ">=" + vec.get(k) + " and " + tempID + "<=" + vec.get(k + deltaID); + else + tempQuery = query + "where " + tempID + ">=" + vec.get(k) + " and " + tempID + "<=" + vec.get(k + deltaID); + System.out.println(tempQuery); + dialog.title.setText("Reading table data ..."); + + bean.makeQuery(tempQuery, deltaID); + dialog.title.setText("Writing table data ..."); + + command = writeDatainDestTable(dialog, command, k, pstm, rowCount); + endIndex = k + deltaID; + } + if ((vec.size() - 1) % numIntervalls == 0) + System.out.println("fits"); + else + { + if (query.indexOf("where") > 0) + tempQuery = query + " and " + tempID + ">=" + vec.get(endIndex) + " and " + tempID + "<=" + vec.lastElement(); + else + tempQuery = query + "where " + tempID + ">=" + vec.get(endIndex) + " and " + tempID + "<=" + vec.lastElement(); + System.out.println(tempQuery); + dialog.title.setText("Reading table data ..."); + bean.makeQuery(tempQuery, 0); + dialog.title.setText("Writing table data ..."); + command = writeDatainDestTable(dialog, command, j, pstm, rowCount); + + System.out.println(" last intervall from " + vec.get(endIndex) + " " + vec.lastElement()); + command = writeDatainDestTable(dialog, command, endIndex, pstm, rowCount); + } + if (query.indexOf("where") > 0) + tempQuery = query + " and " + tempID + ">" + vec.lastElement(); + else + tempQuery = query + " where " + tempID + ">" + vec.lastElement(); + } - pstm.execute(); - //stm.executeUpdate(command.toString()); - dialog.progress.setValue((int) (((double) (j + 1) / (double) rowCount) * 100.0)); - // System.out.println( (int)(((double)(j+1)/(double)result[0].size())*100.0)+" "+result[0].size()+" "+j); - command = null; -}// to for loop - + long endTime = System.currentTimeMillis(); + System.out.println("Time for incremental convert elapsed "+(endTime-startTime)); + } else + { + long startTime = System.currentTimeMillis(); + + bean.makeQuery(query, 0); + command = writeDatainDestTable(dialog, command, j, pstm, rowCount); + long endTime = System.currentTimeMillis(); + System.out.println("Time for old convert elapsed "+(endTime-startTime)); + } + } } catch(Exception e) { System.out.println("Error while connecting to database "+ e); @@ -724,6 +720,65 @@ class Convert dialog.setVisible(false); } + private static StringBuffer writeDatainDestTable(FM2SQL.ProgressDialog dialog, StringBuffer command, int j, PreparedStatement pstm, int rowCount) throws Exception, SQLException + { + Vector row; + while((row=bean.getNextRow())!=null) + { + j++; + // row = (Vector) result[0].get(j); + /* command = new StringBuffer(); + + command.append("INSERT INTO "); + command.append(beanDest.getQC()); + command.append(convertText((String) names.get(tbIndex))); + command.append(beanDest.getQC()); + command.append(" values ( "); + */ + //print rows + Object obj = null; + /* for(int k=0;k