Ejemplo n.º 1
0
 public void dealOneEntry(byte[] bs, Object obj) throws Exception {
   if ((bs == null) || (obj == null)) {
     return;
   }
   if (obj instanceof String) {
     String name = obj.toString();
     if (name.startsWith("File:")) {
       dealFile(name, bs);
     } else if (name.startsWith("CustomTable:")) {
       name = name.substring("CustomTable:".length());
       this.task.setCurrentInfo("正在导入自定义表:" + name);
       DataTable dt = (DataTable) FileUtil.unserialize(bs);
       try {
         if (!this.customTableMap.containsKey(name)) {
           QueryBuilder qb =
               new QueryBuilder(
                   "select * from ZCCustomTableColumn where exists (select ID from ZCCustomTable where SiteID=? and Code=? and Type='Custom' and ZCCustomTableColumn.TableID=ID)",
                   this.newSiteID,
                   name);
           DataTable cdt = this.da.executeDataTable(qb);
           SchemaColumn[] scs = new SchemaColumn[cdt.getRowCount()];
           for (int j = 0; j < scs.length; ++j) {
             DataRow cdr = cdt.getDataRow(j);
             int type = Integer.parseInt(cdr.getString("DataType"));
             SchemaColumn sc =
                 new SchemaColumn(
                     cdr.getString("Code"),
                     type,
                     j,
                     cdr.getInt("Length"),
                     0,
                     "Y".equals(cdr.getString("isMandatory")),
                     "Y".equals(cdr.getString("isPrimaryKey")));
             scs[j] = sc;
           }
           TableCreator tc = new TableCreator(this.da.getConnection().getDBConfig().DBType);
           tc.createTable(scs, name, true);
           tc.executeAndClear(this.da.getConnection());
           this.customTableMap.put(name, "");
           StringBuffer sb = new StringBuffer("insert into " + name + "(");
           for (int j = 0; j < cdt.getRowCount(); ++j) {
             if (j != 0) {
               sb.append(",");
             }
             sb.append(cdt.get(j, "Code"));
           }
           sb.append(") values (");
           for (int j = 0; j < cdt.getRowCount(); ++j) {
             if (j != 0) {
               sb.append(",");
             }
             sb.append("?");
           }
           sb.append(")");
           this.insertQB = new QueryBuilder(sb.toString());
           this.insertQB.setBatchMode(true);
         }
         dealCustomTable(dt, this.insertQB);
       } catch (Exception e) {
         LogUtil.warn("未成功导入表" + name);
         e.printStackTrace();
       }
     } else {
       dealSiteIDTable(name, (DataTable) FileUtil.unserialize(bs));
     }
   } else {
     dealRelaTable((SiteTableRela.TableRela) obj, (DataTable) FileUtil.unserialize(bs));
   }
 }