--- FM2SQL/Attic/Convert.java 2004/01/19 09:40:50 1.16 +++ FM2SQL/Attic/Convert.java 2004/02/12 13:02:56 1.32 @@ -1,5 +1,4 @@ - import java.util.*; import java.sql.*; import java.awt.Cursor; @@ -26,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 @@ -59,7 +59,7 @@ class Convert System.out.println("Finished!"); //convert("jdbc:fmpro:http://141.14.237.74:8050","jdbc:postgresql://erebos/test",null,null); } - public static void convertBatch(DBBean source,DBBean destination,Vector names,Vector layouts,Vector selects,Vector creates,int mode) throws Exception + public static void convertBatch(DBBean source,DBBean destination,Vector names,Vector layouts,Vector selects,Vector creates,int mode) throws Exception { /*FM2SQL.ProgressDialog dialog = new FM2SQL.ProgressDialog(FM2SQL.fmInstance); dialog.setTitle("Conversion running ..."); @@ -69,7 +69,7 @@ class Convert */ // FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); //dialog.thread=Thread.currentThread(); - bean=source; + bean = source; beanDest = destination; /* // setting user and passwd bean.setUserAndPasswd(user,passwd); @@ -382,6 +382,7 @@ class Convert dialog.title.setText("Writing table data ..."); int j = -1; + Vector row = null; command = new StringBuffer(); @@ -398,7 +399,7 @@ class Convert command.append("WHERE "+convertText(ids.get(tbIndex).toString())+ " = ?"); PreparedStatement pstm = beanDest.getConnection().prepareStatement(command.toString()); System.out.println(command+" "+tbIndex); - int rowCount = bean.getRowCount(query); + int rowCount = bean.getRowCount(query); int idIndex = bean.getColumnNames().indexOf(ids.get(tbIndex) ); while ((row = bean.getNextRow()) != null) { @@ -456,9 +457,12 @@ class Convert } catch (Exception e) { System.out.println("Error while connecting to database " + e); - dialog.setVisible(false); - dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + if (dialog != null) + { + dialog.setVisible(false); + dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + } java.io.ByteArrayOutputStream b = new java.io.ByteArrayOutputStream(); java.io.PrintStream stream = new java.io.PrintStream(b); stream.print(command + "\n\n"); @@ -466,15 +470,21 @@ class Convert FM2SQL.showErrorDialog(b.toString(), "Error occured !"); } - dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); - - dialog.setVisible(false); - } - + if (dialog != null) + { + dialog.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + FM2SQL.fmInstance.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); + dialog.setVisible(false); + } - public static void convert(String source,String destination,Vector names,Vector layouts,Vector selects,Vector creates,int mode) throws Exception + } +/** + 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); dialog.setTitle("Conversion running ..."); @@ -482,6 +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 = new TreeSet(); + int deltaID = 1; + String idField = ""; dialog.thread=Thread.currentThread(); // setting user and passwd bean.setUserAndPasswd(user,passwd); @@ -504,10 +517,11 @@ class Convert for(tbIndex=0;tbIndex=start and id<=end + idField = ids.get(tbIndex).toString(); + } catch (Exception e) - { - continue; - } + { + System.out.println(e); + continue; + } //beanDest.setConnection("jdbc:postgresql://erebos/test3"); beanDest.setConnection(destination); @@ -598,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(); @@ -631,63 +633,75 @@ class Convert command.append("?)"); PreparedStatement pstm = beanDest.getConnection().prepareStatement(command.toString()); System.out.println(command); - int rowCount= bean.getRowCount(query); - while((row=bean.getNextRow())!=null) + int rowCount= (idField!="") ? myIds.size():bean.getRowCount(query); + Vector vec = new Vector(myIds); + int endIndex = -1; + String tempQuery=query;String tempID = bean.getQC()+idField+bean.getQC(); + if (!idField.equals("")) { - 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 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); @@ -706,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