1 32 33 package com.knowgate.datacopy; 34 35 import java.sql.SQLException ; 36 import java.sql.Statement ; 37 import java.sql.PreparedStatement ; 38 import java.sql.ResultSet ; 39 import java.sql.ResultSetMetaData ; 40 41 import java.util.HashMap ; 42 43 import java.io.IOException ; 44 import java.io.StringReader ; 45 46 import org.xml.sax.SAXException ; 47 48 import com.knowgate.debug.DebugFile; 49 50 import com.knowgate.datacopy.DataStruct; 51 52 57 public class FullTableCopy extends DataStruct { 58 59 public FullTableCopy() { 60 } 61 62 75 public void insert(String sOriginTable, String sTargetTable, 76 String sOriginWhere, boolean bTruncate) 77 throws SQLException ,ClassNotFoundException ,IOException ,InstantiationException , 78 IllegalAccessException ,SAXException { 79 PreparedStatement oStInsert; 80 PreparedStatement oStSelect; 81 Statement oStDelete; 82 Statement oStMeta; 83 ResultSet oRsMeta; 84 ResultSet oRsSelect; 85 ResultSetMetaData oRsMetaData; 86 StringReader oRead; 87 Object oField; 88 String sSQL; 89 int iColCount; 90 int iSQLType; 91 HashMap oSourceCols; 92 String sColList = ""; 93 94 oStMeta = getOriginConnection().createStatement(); 95 oRsMeta = oStMeta.executeQuery("SELECT * FROM " + sOriginTable + " WHERE 1=0"); 96 oRsMetaData = oRsMeta.getMetaData(); 97 iColCount = oRsMetaData.getColumnCount(); 98 oSourceCols = new HashMap (iColCount*2+2); 99 for (int c=1; c<=iColCount; c++) 100 oSourceCols.put(oRsMetaData.getColumnName(c),null); 101 oRsMeta.close(); 102 oStMeta.close(); 103 104 sSQL = "INSERT INTO "+sTargetTable+" VALUES (?"; 105 for (int c=2; c<=iColCount; c++) sSQL+=",?"; 106 sSQL += ")"; 107 108 oStInsert = getTargetConnection().prepareStatement(sSQL); 109 110 oStMeta = getTargetConnection().createStatement(); 111 oRsMeta = oStMeta.executeQuery("SELECT * FROM " + sTargetTable + " WHERE 1=0"); 112 oRsMetaData = oRsMeta.getMetaData(); 113 iColCount = oRsMetaData.getColumnCount(); 114 for (int c=1; c<=iColCount; c++) { 115 if (oSourceCols.containsKey(oRsMetaData.getColumnName(c))) 116 sColList += (sColList.length()==0 ? "" : ",") + oRsMetaData.getColumnName(c); 117 else 118 sColList += (sColList.length()==0 ? "" : ",") + "NULL AS "+oRsMetaData.getColumnName(c); 119 } 121 if (null==sOriginWhere) 122 oStSelect = getOriginConnection().prepareStatement("SELECT "+sColList+" FROM "+sOriginTable); 123 else if (sOriginWhere.trim().length()==0) 124 oStSelect = getOriginConnection().prepareStatement("SELECT "+sColList+" FROM "+sOriginTable); 125 else 126 oStSelect = getOriginConnection().prepareStatement("SELECT "+sColList+" FROM "+sOriginTable+" WHERE "+sOriginWhere); 127 128 oRsSelect = oStSelect.executeQuery(); 129 130 if (bTruncate) { 131 oStDelete = getTargetConnection().createStatement(); 132 oStDelete.execute("DELETE FROM " + sTargetTable); 133 oStDelete.close(); 134 } 136 iRows = 0; 137 138 while (oRsSelect.next()) { 139 oRead = null; 140 for (int p=1; p<=iColCount; p++) { 141 iSQLType = oRsMetaData.getColumnType(p); 142 oField = oRsSelect.getObject(p); 143 if (iSQLType==-1) { 144 oRead = new StringReader (oField.toString()+" "); 145 oStInsert.setCharacterStream(p, oRead, oField.toString().length()-1); 146 } 147 else 148 oStInsert.setObject ( p, 149 convert(oField,iSQLType), 150 mapType(iSQLType)); 151 } oStInsert.executeUpdate(); 153 if (oRead!=null) oRead.close(); 154 155 iRows++; 156 } 158 oRsSelect.close(); 159 oStSelect.close(); 160 oRsMeta.close(); 161 oStMeta.close(); 162 oStInsert.close(); 163 } 164 165 177 public void insert(String sOriginTable, String sTargetTable, boolean bTruncate) 178 throws SQLException ,ClassNotFoundException ,IOException ,InstantiationException , 179 IllegalAccessException ,SAXException { 180 insert (sOriginTable, sTargetTable, null, bTruncate); 181 } 182 183 } 184
| Popular Tags
|